'''udp套接字''' from socket import * '''服务端''' ip_port = ('127.0.0.1', 8000) buffer_size = 1024 # 服务器信息和recv收录字节大小,到时候这样的数据可以写到配置文件,程序代码可无需把数据写死 udp_server = socket(AF_INET, SOCK_DGRAM) # DGRAM=datagram,翻译为数据报的意思 # socket实例化 udp_server.bind(ip_port) # 绑定服务器ip和端口 while True: data, addr = udp_server.recvfrom(buffer_size) # 收到的消息是元组的类型,第一个参数为消息,第二个参数为元组类型的对方的ip地址和端口信息 # recvfrom()收到客户端发送的消息,收到的addr信息是客户端的 print('客户端发送的消息解压后数据为:', data, addr) # b'haha' ('127.0.0.1', 59702) udp_server.sendto(data.upper(), addr) # 发送信息需要两个参数,一个是发送数据,一个是元组类型的对方ip地址和端口信息 # sendto()发送消息给客户端,所以addr就是写客户端的 udp_server.close() # 关闭链接 # 注意:服务端sendto()传的ip和端口信息是客户端的,但是客户端的recvfrom()收到的ip和端口信息则是服务端的(两端可互换表达意思一样)
from socket import * '''客户端''' ip_port = ('127.0.0.1', 8000) buffer_size = 1024 udp_client = socket(AF_INET, SOCK_DGRAM) while True: msg = input('请输入:').strip() udp_client.sendto(msg.encode('utf-8'), ip_port) # 发送消息给服务端,那么第二个参数就写服务端的 data1, addr1 = udp_client.recvfrom(buffer_size) # 收到服务端发送的信息,所以addr1是服务端的ip及端口信息 print('服务端发送的消息:', data1, addr1) udp_client.close()
'''tcp和udp归纳整理''' # tcp服务端:socket(套接字家族,tcp协议),setsocketopt(解决由于突然断开链接引起的端口被占用情况,需要3个参数),bind(元组类型的服务器ip及端口信息),listen(监听数量),accept()--->(返回结果为元组类型,第一个为链接,第二个为客户端的ip及端口信息),recv(字节数)/send(编码后的数据),colse(),close() # tcp客户端:socket(套接字家族,tcp协议),connect(元组类型的服务器ip及端口信息),send(编码后的数据)/recv(字节数),close() # udp服务端:socket(套接字家族,tcp协议),bind(元组类型的服务器ip及端口信息),recvfrom(字节数)--->(返回结果为元组类型,第一个为编码后数据,第二个为对方的ip及端口信息)/sendto(编码后数据,元组形式的对方IP和端口),close() # udp客户端:socket(套接字家族,tcp协议),sendto(编码后数据,元组形式的对方IP和端口)/recvfrom(字节数)--->(返回结果为元组类型,第一个为编码后数据,第二个为对方的ip及端口信息),close()