python中的不完全数据传输

2024-04-25 20:21:31 发布

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

我正在创建一个客户机-服务器程序,客户机在该程序上下载服务器的文件。它在localhost中工作正常,但问题发生在除localhost连接之外的其他连接中。我尝试过谷歌搜索,但没有一个解决方案(从以前的建议到同一个问题)奏效。你知道吗

这是我的密码:

def upload(sock): # server.py
    filename = str(sock.recv(4096)).split(' end')[0]
    if os.path.exists(filename):
        sock.send('YES')
        sock.send(str(os.path.getsize(filename)) + ' end')
        foo = open(filename, 'rb')
        upbytes = foo.read(4096)
        sock.sendall(upbytes)
        while upbytes != '':
            upbytes = foo.read(4096)
            sock.sendall(upbytes)
        foo.close()
        print "\tUpload Complete !"
    else:
        sock.send('NO')


def download(sock, filename): #client.py
    sock.send(filename + ' end')
    if sock.recv(4096) == 'YES':
        filesize = int(str(sock.recv(4096)).split(' end')[0])
        print filesize, 'filesize'
        foo = open('downloaded_' + os.path.basename(filename), 'wb')
        downbytes = sock.recv(4096)
        foo.write(downbytes)
        downlen = len(downbytes)
        while downlen < filesize:
            downbytes = sock.recv(4096)
            if not downbytes:
                break
            foo.write(downbytes)
            downlen += len(downbytes)
        foo.close()
        print 'filesize', filesize, 'downlen', downlen
        print "\t\tDownload Complete !\n"
    else:
        print "\t\tFile not found ! <" + filename + '>'

我试过不同的解决办法,但都不管用!你知道吗


Tags: pathsendiffooosfilenameendsock
1条回答
网友
1楼 · 发布于 2024-04-25 20:21:31

套接字在使用时没有“消息”的概念。如果你把'YES'然后'some_filename'放到套接字上,很有可能(通过做一个本地连接),当你做一个recv(4096)时,它只显示为'YES',而不是'YESsome_f'...。你知道吗

您需要自己将流解析为消息(存储接收到的数据),或者添加一层包含消息的内容(如HTTP或ZMQ)。你知道吗

如果您想托管文件,^{}可以为您这样做。你知道吗

相关问题 更多 >