2

私はここでコードを見つけました: 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 行はファイルの内容を出力します..つまり、コンテンツが転送されていることを意味します..しかし、ファイルは空ですか??

私は何が欠けていますか?ありがとう

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 に答える