我在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()
答案 0 :(得分:1)
您似乎正在使用常规用户空间套接字发送数据包。在这种情况下,由于FCS是由网络接口卡物理生成的,因此发送数据包的可能性很小。
您可能看到的是FCS错误due to completely different reasons,可以安全地忽略它。
我会查找其他设备为什么不接收数据包的其他原因,例如防火墙或NAT。首先使用netcat或类似工具在两台计算机之间发送和接收UDP数据包。