网络QQ聊天代码实例
前端 客户端server
首先引入
import socket
ip_port=(\'127.0.0.1\',8081)
udp_server_sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #DGRAM:datagram 数据报文的意思,象征着UDP协议的通信方式
udp_server_sock.bind(ip_port)#你对外提供服务的端口就是这一个,所有的客户端都是通过这个端口和你进行通信的
while True:
qq_msg,addr=udp_server_sock.recvfrom(1024)# 阻塞状态,等待接收消息
print(\'来自[%s:%s]的一条消息:\033[1;44m%s\033[0m\' %(addr[0],addr[1],qq_msg.decode(\'utf-8\')))
back_msg=input(\'回复消息: \').strip()
udp_server_sock.sendto(back_msg.encode(\'utf-8\'),addr)
建立后端服务端client
import socket BUFSIZE=1024 udp_client_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) qq_name_dic={ \'taibai\':(\'127.0.0.1\',8081), \'Jedan\':(\'127.0.0.1\',8081), \'Jack\':(\'127.0.0.1\',8081), \'John\':(\'127.0.0.1\',8081), } while True: qq_name=input(\'请选择聊天对象: \').strip() while True: msg=input(\'请输入消息,回车发送,输入q结束和他的聊天: \').strip() if msg == \'q\':break if not msg or not qq_name or qq_name not in qq_name_dic:continue udp_client_socket.sendto(msg.encode(\'utf-8\'),qq_name_dic[qq_name])# 必须带着自己的地址,这就是UDP不一样的地方,不需要建立连接,但是要带着自己的地址给服务端,否则服务端无法判断是谁给我发的消息,并且不知道该把消息回复到什么地方,因为我们之间没有建立连接通道 back_msg,addr=udp_client_socket.recvfrom(BUFSIZE)# 同样也是阻塞状态,等待接收消息 print(\'来自[%s:%s]的一条消息:\033[1;44m%s\033[0m\' %(addr[0],addr[1],back_msg.decode(\'utf-8\'))) udp_client_socket.close()
版权声明:本文为liurenli原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。