Python中通过accept()方法实现UDP套接字通信
发布时间:2023-12-23 02:53:06
在Python中,可以使用socket模块创建UDP套接字,并使用bind()方法将套接字绑定到指定的IP地址和端口号。然后,可以使用recvfrom()方法接收来自其他主机发送的数据包,并使用sendto()方法将数据包发送给其他主机。
下面是一个使用accept()方法实现UDP套接字通信的例子:
import socket
# 创建UDP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定套接字到指定的IP地址和端口号
server_address = ('localhost', 12345)
print('Starting up on {} port {}'.format(*server_address))
sock.bind(server_address)
# 等待接收数据包并发送回复
while True:
print('
Waiting to receive message')
data, address = sock.recvfrom(4096)
print('Received {} bytes from {}'.format(len(data), address))
print(data)
# 发送回复消息
reply = 'I received your message: {}'.format(data.decode())
sock.sendto(reply.encode(), address)
print('Reply sent')
在上面的例子中,首先创建了一个UDP套接字,然后将其绑定到localhost的12345端口。然后,通过循环等待接收数据包。当收到来自其他主机的数据包时,会打印出接收到的字节大小和发送方的地址信息。然后,发送一个回复消息,回复内容为接收到的消息加上一个字符串前缀。最后,等待下一个数据包的到来。
在另一个终端上,你可以使用以下代码来发送消息给上述服务器:
import socket
# 创建UDP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 服务器地址
server_address = ('localhost', 12345)
# 发送消息
message = 'Hello, server!'
sock.sendto(message.encode(), server_address)
# 接收回复
data, address = sock.recvfrom(4096)
print('Received {} bytes from {}'.format(len(data), address))
print(data.decode())
上述代码会将消息Hello, server!发送给服务器,并接收服务器的回复。最后,打印出回复的内容。需要确保服务器已经在运行。
总结起来,通过上述例子,我们学会了如何使用Python中的accept()方法来实现UDP套接字的通信。首先,我们创建UDP套接字并绑定到指定的IP地址和端口号。然后,通过循环等待接收数据包,并发送回复消息。这样就可以实现基本的UDP通信了。
