【发布时间】:2018-10-01 22:19:25
【问题描述】:
我正在尝试通过以块的形式发送文件内容(有点像种子),通过套接字发送一个大文件 (.avi)。问题是脚本不发送文件。我在这里没有想法。
非常感谢您对脚本的任何帮助或修改。
服务器:
import socket
HOST = ""
PORT = 8050
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((HOST, PORT))
sock.listen(1)
conn, addr = sock.accept()
print("Connected by ", str(addr))
while 1:
data = conn.recv(1024)
if data.decode("utf-8") == 'GET':
with open(downFile,'rb') as output:
l = output.read(1024)
while (l):
conn.send(l)
l = output.read(1024)
output.close()
conn.close()
客户:
import socket
HOST = "localhost"
PORT = 8050
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((HOST,PORT))
while 1:
message = input()
sock.send(bytes(message,'UTF-8'))
conn.send(str.encode('GET'))
with open(downFile, 'wb+') as output:
while True:
rec = str(sock.recv(1024), "utf-8")
if not rec:
break
output.write(rec)
output.close()
print('Success!')
sock.close()
【问题讨论】:
-
问题是脚本没有发送文件它做了什么?它有什么作用吗?您收到错误消息吗?
-
您的代码存在缩进问题,而且您混合匹配两个文件之间的名称。您的预期行为是什么,实际发生了什么?如果您在客户提示中输入消息后它没有失败,那么您没有在此处显示您的实际代码,因此我们无法告诉您为什么您的代码不起作用。
-
另外,您似乎在客户端不必要地将接收到的字节转换为字符串。如果接收到的数据实际上不是 UTF-8 编码的字符串,那么这将导致数据损坏。
标签: python python-3.x sockets