'''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()
标签:udp,ip,端口,元组,接字,服务端,客户端 来源: https://www.cnblogs.com/xuewei95/p/14786500.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。