python套接字未接收到d

2024-06-26 13:25:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在UDP上实现RFC1350。到目前为止,发送文件都很顺利 从一个服务器到另一个客户端的工作就像一个符咒,我给出了接收数据到服务器和发送数据到客户端的方法,但这个方向是不可能的。在

密钥服务器代码:

    def listen(self):
    while True:
        packet, address = self.serverSocket.recvfrom(512)

        mode = str(packet)[2:5]
        self.file = str(str(packet)[6:]).replace("'", "")

        if(mode == "RRQ"):
            self.sendResponse(address)
        else:
            self.receiveData()

def receiveData(self):
    data = open("new1.jpg", "wb")
    while True:
        packet, server = self.serverSocket.recvfrom(512)
        if packet.__len__() == 512:
            data.write(packet)
        else:
            data.write(packet)
            break;

关键客户代码:

^{pr2}$
  1. 客户机发送WRQ数据包,文件名将作为传输密钥
  2. 服务器记录。此实例中的传输类型RRQ或WRQ,并开始侦听 通过receiveData()传输。在

客户端在发送sendWRQ()后终止现在在sendData或receiveData的服务器或客户端出现问题我得到一个有0kB的文件

所有代码:


Tags: 文件代码self服务器true客户端datapacket
1条回答
网友
1楼 · 发布于 2024-06-26 13:25:44

客户端通知服务器文件已完成的方法不正确。在

在您的代码中,当文件完成时,在客户端,您将调用“sendto”来发送一个空字符串,但这实际上不会起任何作用;在服务器端,您使用条件“packet.len()==512”来判断文件是否已完成,但是,在传输过程中,如果服务器cpu的运行速度比传输速度,你会经常得到零包长度,但这并不表示传输完成,也许下一个包就在路上。在

我的建议是使用一个特殊的命令来指示传输的结束,服务器只有在收到该命令时才会中断循环。在

相关问题 更多 >