python_网络编程socket(UDP)
服务端:
import socket sk = socket.socket(type=socket.SOCK_DGRAM) #创建基于UDP协议的socket对象 sk.bind(('127.0.0.1',8099)) #把地址绑定到套接字 msg,addr = sk.recvfrom(1024) #接收数据和数据的地址(数据大小) print(msg.decode('utf-8')) #打印 sk.sendto(b'wdc',addr) #发送数据和接收的数据的地址 sk.close() #关闭连接
客户都:
import socket sk = socket.socket(type=socket.SOCK_DGRAM) #创建基于UDP协议的socket对象 ip_port = ('127.0.0.1',8099) #将地址和端口号放在一共元组里面 sk.sendto(b'yhf',ip_port) #发送数据和地址 ret,addr = sk.recvfrom(1024) #接收数据和数据的地址(数据大小) print(ret.decode('utf-8')) sk.close() #关闭连接
- UDP的server不需要进行监听也不需要建立连接
- 在启动服务之后只能被动的等待客户都发送信息过来
- 客户都发送消息的同时还会,自带地址信息
- 消息回复的时候,不仅需要发送消息,还需要把自己的地址填写上
实例:多客户端通信
服务端:
import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(('127.0.0.1',8099)) while True: msg,addr = sk.recvfrom(1024) print(msg.decode('utf-8')) info = input('>>>') info = ('来自服务器的消息:{}'.format(info)).encode('utf-8') sk.sendto(info,addr) sk.close()
客户端1:
import socket sk = socket.socket(type=socket.SOCK_DGRAM) ip_port = ('127.0.0.1',8099) while True: info = input('大哥:') info = ('来自大哥的消息:{}'.format(info)).encode('utf-8') sk.sendto(info,ip_port) msg,addr = sk.recvfrom(1024) print(msg.decode('utf-8')) sk.close()
客户端2:
import socket sk = socket.socket(type=socket.SOCK_DGRAM) ip_port = ('127.0.0.1',8099) while True: info = input('二哥:') info = ('来自二哥的消息:{}'.format(info)).encode('utf-8') sk.sendto(info, ip_port) msg,addr = sk.recvfrom(1024) print(msg.decode('utf-8')) sk.close()