1、基礎功能
1、server端
import socket sk = socket.socket(type=socket.SOCK_DGRAM) # 建立一個socket對象, # 指定以UDP協議的形式來連接 sk.bind(('127.0.0.1',8080)) # 指定服務的地址 msg,addr = sk.recvfrom(1024) # msg為接收到的消息,addr為發送端的地址 print(msg,addr) sk.sendto(b'HELLO',addr) # 給發送端回復消息,需攜帶 發送端的地址 sk.close() # 關閉socket連接
2、clien端
import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.sendto(b'hello',('127.0.0.1',8080)) # 直接給服務器發送一段消息,需攜帶目的地址 msg,addr = sk.recvfrom(1024) # 接收對面的回信 print(msg) sk.close()
2、udp聊天小工具
1、客戶端
import socket ph = socket.socket(type=socket.SOCK_DGRAM) ip_port = (("127.0.0.1",8089)) while 1: input_msg = input(">>>>>>:") ph.sendto(bytes(input_msg,encoding="utf-8"),ip_port) #向服務端發消息,需攜帶自己的地址 msg,adr = ph.recvfrom(1024) if msg.decode(encoding="utf-8") == "收到關閉命令,執行關閉連接操作": break print(msg.decode(encoding="utf-8")) ph.close()
#注意:input_msg = input(">>>>>>:")最好不要寫在循環外面,應該寫在循環里面緊靠發送消息時
2、服務端
import socket ph = socket.socket(type=socket.SOCK_DGRAM) ph.bind(("127.0.0.1",8089)) while 1: msg,adr = ph.recvfrom(1024) #接受的客戶端的消息及地址 if msg.decode(encoding="utf-8") == "q": ph.sendto(bytes("收到關閉命令,執行關閉連接操作",encoding="utf-8"), adr) break # print(msg,adr) print(msg.decode(encoding="utf-8")) input_msg = input(">>>>>>:") ph.sendto(input_msg.encode(encoding="utf-8"),adr)#向客戶端發送消息,需攜帶客戶端的地址 ph.close()
#注意:input_msg = input(">>>>>>:")最好不要寫在循環外面,應該寫在循環里面緊靠發送消息時
總結:
#UDP server 不需要建立連接,也不需要監聽
#在啟動服務之后只能被動的接收消息
#客戶端發送消息的同時還會自帶地址信息
#回復消息的時候,不僅需要發送消息,還需要發送對方的地址