前端 客戶端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()