我正在尝试通过以太网在两个 Raspberry Pi 之间建立 UDP 通信,但似乎我的服务器仅在客户端连接到特定端口时才接收客户端数据包。
我们称它们为 Rasp A 和 Rasp B。它们安装了不同的软件和不同的配置。
Rasp A 可以正常作为服务器和客户端工作,但 Rasp B 出现了一些问题。
当我设置B为服务器,A为客户端时,只有客户端绑定了8002或8003端口,B才会收到A的数据包。我把脚本放在下面。
服务器代码:
import socket
# localIP = "169.254.155.4"
localIP = "128.30.1.198"
localPort = 8002
bufferSize = 1024
msgFromServer = "Hello UDP Client"
bytesToSend = str.encode(msgFromServer)
# Create a datagram socket
UDPServerSocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
# Bind to address and ip
UDPServerSocket.bind((localIP, localPort))
print("UDP server up and listening")
# Listen for incoming datagrams
try:
while(True):
bytesAddressPair = UDPServerSocket.recvfrom(bufferSize)
message = bytesAddressPair[0]
address = bytesAddressPair[1]
clientMsg = "Message from Client:{}".format(message)
clientIP = "Client IP Address:{}".format(address)
print(clientMsg)
print(clientIP)
# Sending a reply to client
UDPServerSocket.sendto(bytesToSend, address)
# UDPServerSocket.close()
except Exception as ex:
print (ex)
UDPServerSocket.close()
客户端代码:
import socket
msgFromClient = "Hello UDP Server"
bytesToSend = str.encode(msgFromClient)
serverAddressPort = ("128.30.1.198", 8002)
bufferSize = 1024
# Create a UDP socket at client side
print('creating socket')
UDPClientSocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
UDPClientSocket.bind(('128.30.1.2',8002))
# Send to server using created UDP socket
print('sending message')
UDPClientSocket.sendto(bytesToSend, serverAddressPort)
print('receiving message')
msgFromServer = UDPClientSocket.recvfrom(bufferSize)
msg = "Message from Server {}".format(msgFromServer[0])
print(msg)
Rasp B 只会在客户端绑定到端口 8002 或 8003 时按预期接收数据包,如果套接字绑定到任何其他端口或根本没有绑定,则不会接收任何内容。以下是一些嗅探到的数据包:
工作通讯
客户端发送>>>
###[ IP ]###
version = 4
ihl = 5
tos = 0x0
len = 44
id = 5063
flags = DF
frag = 0
ttl = 64
proto = udp
chksum = 0x23f6
src = 128.30.1.2
dst = 128.30.1.198
\options \
###[ UDP ]###
sport = 8003
dport = 8002
len = 24
chksum = 0xc98f
###[ Raw ]###
load = 'Hello UDP Server'
###[ Padding ]###
load = '\x00\x00'
服务器收到此消息并响应<<<
###[ IP ]###
version = 4
ihl = 5
tos = 0x0
len = 44
id = 35228
flags = DF
frag = 0
ttl = 64
proto = udp
chksum = 0xae20
src = 128.30.1.198
dst = 128.30.1.2
\options \
###[ UDP ]###
sport = 8002
dport = 8003
len = 24
chksum = 0x32e
###[ Raw ]###
load = 'Hello UDP Client'
无法正常通讯: 客户端发送 >>>
###[ IP ]###
version = 4
ihl = 5
tos = 0x0
len = 44
id = 6060
flags = DF
frag = 0
ttl = 64
proto = udp
chksum = 0x2011
src = 128.30.1.2
dst = 128.30.1.198
\options \
###[ UDP ]###
sport = 8002
dport = 8004
len = 24
chksum = 0xc98e
###[ Raw ]###
load = 'Hello UDP Server'
###[ Padding ]###
load = '\x00\x00'
服务器未收到此消息且未响应。
是否与防火墙配置有关?