UDP基础server与client
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 不需要建立连接,也不需要监听
#在启动服务之后只能被动的接收消息
#客户端发送消息的同时还会自带地址信息
#回复消息的时候,不仅需要发送消息,还需要发送对方的地址