2

我在这里找到了代码:Send a file through sockets in Python (the selected answer)

但是我会再次在这里发布..

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 行打印文件内容..所以这意味着内容正在传输..但是文件是空的??

我错过了什么?谢谢

4

2 回答 2

4

您可能正试图在程序运行时检查文件。f.close()该文件正在被缓冲,因此在执行该行或写入大量数据之前,您可能看不到其中的任何输出。f.flush()在行后添加调用以f.write(l)实时查看输出。请注意,它会在一定程度上损害性能。

于 2013-02-10T21:51:26.117 回答
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()
于 2013-02-10T22:36:31.493 回答