5 多线程 模拟qq聊天
Posted 不要被骄傲遮蔽了双眼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5 多线程 模拟qq聊天相关的知识,希望对你有一定的参考价值。
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
以上是关于5 多线程 模拟qq聊天的主要内容,如果未能解决你的问题,请参考以下文章