Python 发送格式错误的 UDP 数据包
我在安卓设备上接收UDP数据包时遇到了问题,所以我想确认一下我发送的是否正确。我使用Wireshark这个工具,每次尝试向一个远程地址发送UDP数据包时,都会出现以下错误信息:
232646 311.898009000 172.56.16.78 192.168.0.3 UDP 64 Source port: 31947 Destination port: 5001 [ETHERNET FRAME CHECK SEQUENCE INCORRECT]
Frame check sequence: 0xf5b6d06d [incorrect, should be 0xb0c869e3]
有没有人知道怎么解决这个问题?这会不会是我在安卓设备上无法接收UDP数据包的原因呢?
服务器代码:
import http.server
import socket
import threading
import socketserver
class ThreadedUDPRequestHandler(socketserver.BaseRequestHandler):
def handle(self):
data = self.request[0].strip().decode("utf-8")
print("{} Recieved: ".format(self.client_address) + data)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
response = data.upper()
sock.sendto(bytes(response, "utf-8"), self.client_address)
print("{} Sent: {}".format(self.client_address,response))
if __name__ == "__main__":
udpserver = ThreadedUDPServer((HOST,PORT+1), ThreadedUDPRequestHandler)
udp_thread = threading.Thread(target=udpserver.serve_forever)
udp_thread.daemon = True
udp_thread.start()
print("UDP serving at port", PORT+1)
while True:
pass
udpserver.shutdown()
1 个回答
1
看起来你是在用普通的用户空间套接字发送数据包。在这种情况下,数据包出现问题的可能性很小,因为数据包的帧校验序列(FCS)是由网络接口卡物理生成的。
你可能看到的是一个FCS错误,这可能是由完全不同的原因造成的,可以放心忽略。
我建议你找找其他原因,看看为什么另一个设备收不到数据包,比如防火墙或网络地址转换(NAT)。可以先试试用netcat或者类似的工具在两台机器之间发送和接收UDP数据包。