Python 发送格式错误的 UDP 数据包

0 投票
1 回答
1588 浏览
提问于 2025-04-18 15:51

我在安卓设备上接收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数据包。

撰写回答