各位大侠,
小弟在用python 做一个UDP 服务器端。脚本如下:
#/usr/bin/python3
from socketserver import ThreadingUDPServer, DatagramRequestHandler
import socket
class MyDatagramRequestHandler(DatagramRequestHandler):
def handle(self):
print(self.client_address)
Data = self.request[0]
socket = self.request[1]
#print(Data)
socket.sendto(b'OKOK', self.client_address)
if __name__ == "__main__":
HostIP = “192.168.15.2”
UdpPort = 9001
Server_Address = (HostIP, UdpPort)
print("Starting UDP server on %s port %d..." % (HostIP, UdpPort))
Udp_server = ThreadingUDPServer(Server_Address, MyDatagramRequestHandler)
Udp_server.serve_forever()
但我用wires hark监测数据包的时候,发现上面程序在收到UDP client发来的数据后,在使用socket.sendto() 回送数据的时候,
会连续发出两个数据包。第一个是正确的数据包,而第二个会发出一个空数据包。
上面是我用wireshark抓到的包。从中可以看出,连续两笔数据被发送到client. 搞不清楚这是怎么回事。
但从client 端用同样的 sendto() 发出来的包就是正常的。只有一个数据包发送到 Udp server端。下面是Client端的部分代码:
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = (HostIP, UdpPort)
Message = b"OK"
sent = sock.sendto(Message, server_address)
百思不得其解,Server侧出了什么问题。请各位高人指点一下。 多谢多谢。