欢迎访问宙启技术站
智能推送

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通信了。