不爱学习的刘同学

导航

UDP

UDP

UDP是一种全双工通信协议。 UDP协议首部中有一个16位的大长度. 也就是说一个UDP能传输的报文长度是64K(包含UDP首部)。如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装

 

一.UDP套接字(接字是互联网用户层的接口,可以实现不同终端间的数据传递)

import socket

# 创建udp套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

# 使用udp套接字向目标ip、端口发送消息
udp_socket.sendto(b'qwer',('192.168.1.4',7890))
sendto第一个参数是发送内容,必须是字节类型,第二个参数是目标ip和端口,必须是元祖类型

# 关闭udp套接字
udp_socket.close()

二.udp套接字绑定本地ip和端口接收数据

绑定本地ip和端口是为了发送方有明确的地址和端口,类似写信的模式,地址和门牌号,只有绑定了自家地址才能接收数据。

使用:

import socket

# 创建udp套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

# 绑定本地信息
udp_scoket.bind(('',7890))

# 使用udp套接字向目标ip、端口发送消息
udp_socket.sendto(b'qwer',('192.168.1.4',7890))
sendto第一个参数是发送内容,必须是字节类型,第二个参数是目标ip和端口,必须是元祖类型

# 接收数据
recv_data = udp_scoket.recvfrom(1024) 接收数据大小

# 打印接收数据
print('recv_data')

# 关闭udp套接字
udp_socket.close()

 

三.UDP多人聊天

import socket

 

def send_msg(udp_socket):
"""
发送消息
:return:
"""
# 发送
udp_nei = input('情输入要发送的消息:')
udp_ip = input('情输入对方的ip:')
udp_port = input('情输入对方的port:')

udp_socket.sendto(udp_nei.encode('utf-8'), (udp_ip, int(udp_port)))

return 'ok'

def recv_msg(udp_socket):

recv_data = udp_socket.recvfrom(1024)
print(recv_data[0], recv_data[1])

return 'ok'

def main():
# 创建套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

# 绑定本地信息
udp_socket.bind(('',7788))

# 循环来进行处理事情
while True:
print('=====帅哥美女聊天室=====')
con = input('请输入功能:'
'1.发送消息'
'2.接收消息'
'3.关闭聊天室')

if int(con) == 1:
# 发送
send_msg(udp_socket)

elif int(con) == 2:
# 接收并显示
recv_msg(udp_socket)

elif int(con) == 3:
udp_socket.close()
break

 

 

if __name__ == '__main__':
main()

 

posted on 2023-01-12 00:27  不爱学习的刘同学  阅读(474)  评论(0编辑  收藏  举报