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(" >>%s:%s"%(recvInfo[1],data),end="") print(" >>") #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)
- 2 的区别
软回车:
在Windows 中表示换行且回到下一行的最开始位置。相当于Mac OS 里的
的效果。
在Linux、unix 中只表示换行,但不会回到下一行的开始位置。
软空格:
在Linux、unix 中表示返回到当行的最开始位置。
在Mac OS 中表示换行且返回到下一行的最开始位置,相当于Windows 里的
的效果。
跳格(移至下一列)。
它们在双引号或定界符表示的字符串中有效,在单引号表示的字符串中无效。
一般一起用,用来表示键盘上的回车键,也可只用
。
表示键盘上的“TAB”键。
文件中的换行符号:
linux,unix:
windows :
Mac OS :