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

时间:2014-08-03 19:38:31

标签: python networking udp wireshark

我在Android设备上接收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]

有谁知道如何解决这个问题?这会导致我无法在Android设备上接收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 个答案:

答案 0 :(得分:1)

您似乎正在使用常规用户空间套接字发送数据包。在这种情况下,由于FCS是由网络接口​​卡物理生成的,因此发送数据包的可能性很小。

您可能看到的是FCS错误due to completely different reasons,可以安全地忽略它。

我会查找其他设备为什么不接收数据包的其他原因,例如防火墙或NAT。首先使用netcat或类似工具在两台计算机之间发送和接收UDP数据包。