我正在创建一个客户机-服务器程序,客户机在该程序上下载服务器的文件。它在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 + '>'
我试过不同的解决办法,但都不管用!你知道吗
套接字在使用时没有“消息”的概念。如果你把
'YES'
然后'some_filename'
放到套接字上,很有可能(通过做一个本地连接),当你做一个recv(4096)
时,它只显示为'YES'
,而不是'YESsome_f'...
。你知道吗您需要自己将流解析为消息(存储接收到的数据),或者添加一层包含消息的内容(如HTTP或ZMQ)。你知道吗
如果您想托管文件,^{} 可以为您这样做。你知道吗
相关问题 更多 >
编程相关推荐