1.多线程思路
- 使用多线程完成一个全双工的QQ聊天程序
2.版本1:程序小框架
#1.收数据,然后打印 def recvData(): pass #2.检测键盘,发数据 def sendData(): pass def main(): pass if __name__ == "__main__": main()
3.版本:2:该程序框架,多线程
from threading import Thread #1.收数据,然后打印 def recvData(): while True: recvInfo = udpSocket.recvfrom(1024) print(">>%s:%s"%(recvInfo[1],recvInfo[0])) #2.检测键盘,发数据 def sendData(): while True: sendInfo = input("<< ") udpSocket.sendto(sendInfo.encode("gb2312"),(xxx_ip,xxx_port)) def main(): tr = Thread(target=recvData) ts = Thread(target=sendData) tr.start() ts.start() tr.join() ts.join() if __name__ == "__main__": main()
4.版本3:socket套接字
- udpSocket = None (对象)
- udpSocket = “”(字符串)
- udpSocket = 0 (数字)
from threading import Thread from socket import * #1.收数据,然后打印 def recvData(): while True: recvInfo = udpSocket.recvfrom(1024) print(">>%s:%s"%(recvInfo[1],recvInfo[0])) #2.检测键盘,发数据 def sendData(): while True: sendInfo = input("<< ") udpSocket.sendto(sendInfo.encode("gb2312"),(destIp,destPort)) udpSocket = None destIp = "" destPort = 0 def main(): global udpSocket global destIp global destPort destIp = input("对方的ip:") destPort = int(input("对方的port:")) udpSocket = socket(AF_INET,SOCK_DGRAM) udpSocket.bind(("",3456)) tr = Thread(target=recvData) ts = Thread(target=sendData) tr.start() ts.start() tr.join() ts.join() if __name__ == "__main__": main()
5.版本4:全双工 优化
from threading import Thread from socket import * #1.收数据,然后打印 def recvData(): while True: recvInfo = udpSocket.recvfrom(1024) data = recvInfo[0].decode("gb2312") print("\r>>%s:%s"%(recvInfo[1],data),end="") print("\r>>") #2.检测键盘,发数据 def sendData(): while True: sendInfo = input("<< ") udpSocket.sendto(sendInfo.encode("gb2312"),(destIp,destPort)) udpSocket = None destIp = "" destPort = 0 def main(): global udpSocket global destIp global destPort destIp = input("对方的ip:") destPort = int(input("对方的port:")) udpSocket = socket(AF_INET,SOCK_DGRAM) udpSocket.bind(("",7895)) tr = Thread(target=recvData) ts = Thread(target=sendData) tr.start() ts.start() tr.join() ts.join() if __name__ == "__main__": main()
6 问题
- 1.print函数
In [18]: print("ddd") ddd In [19]: help(print)
\n 软回车:
在Windows 中表示换行且回到下一行的最开始位置。相当于Mac OS 里的 \r 的效果。 在Linux、unix 中只表示换行,但不会回到下一行的开始位置。
\r 软空格:
在Linux、unix 中表示返回到当行的最开始位置。 在Mac OS 中表示换行且返回到下一行的最开始位置,相当于Windows 里的 \n 的效果。
\t 跳格(移至下一列)。
它们在双引号或定界符表示的字符串中有效,在单引号表示的字符串中无效。 \r\n 一般一起用,用来表示键盘上的回车键,也可只用 \n。 \t表示键盘上的“TAB”键。
文件中的换行符号:
linux,unix: \r\n windows : \n Mac OS : \r
时间: 2024-10-21 00:55:24