python 的 一个socket.sendto() 命令发出了2个数据包

qpmaggie 2019-04-17 11:43:52
各位大侠,

小弟在用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侧出了什么问题。请各位高人指点一下。 多谢多谢。

...全文
588 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
我是你先人 2020-12-28
  • 打赏
  • 举报
回复
解决了吗,请问怎么解决的

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧