我在这里找到了代码:Send a file through sockets in Python(所选答案)
但我会在这里再次发布它..
server.py
import socket
import sys
s = socket.socket()
s.bind(("localhost",9999))
s.listen(10)
while True:
sc, address = s.accept()
print address
i=1
f = open('file_'+ str(i)+".txt",'wb') #open in binary
i=i+1
while (True):
l = sc.recv(1024)
while (l):
print l #<--- i can see the data here
f.write(l) #<--- here is the issue.. the file is blank
l = sc.recv(1024)
f.close()
sc.close()
s.close()
client.py
import socket
import sys
s = socket.socket()
s.connect(("localhost",9999))
f=open ("test.txt", "rb")
l = f.read(1024)
while (l):
print l
s.send(l)
l = f.read(1024)
s.close()
在服务器代码上,print l行打印文件内容。这意味着正在传输内容。 但那时文件是空的??
我错过了什么? 感谢答案 0 :(得分:4)
您可能正在尝试在程序运行时检查文件。该文件正在缓冲,因此在执行f.close()
行之前,或者在写入大量数据之前,您可能看不到任何输出。在f.flush()
行之后添加对f.write(l)
的调用,以实时查看输出。请注意,它会在某种程度上损害性能。
答案 1 :(得分:2)
那么服务器代码无论如何都没有用,我已对其进行了修改以使其正常工作。
该文件为空,因为它卡在while True
中,并且永远无法关闭文件。
此外,i=1
位于循环内部,因此始终写入同一文件。
import socket
import sys
s = socket.socket()
s.bind(("localhost",9999))
s.listen(10)
i=1
while True:
print "WILL accept"
sc, address = s.accept()
print "DID accept"
print address
f = open('file_'+ str(i)+".txt",'wb') #open in binary
i += 1
l = sc.recv(1024)
while (l):
f.write(l) #<--- here is the issue.. the file is blank
l = sc.recv(1024)
f.close()
sc.close()
print "Server DONE"
s.close()