クライアントがサーバーに接続すると、ディレクトリを参照してファイルを取り込むことができるPythonプログラムを作成しようとしています。ブラウジング部分はうまく動作し、クライアントのすべてのディレクトリを出力します。 は、ここでは、コードの一部です:ソケットPython 3.5:ソケットサーバーが永久にファイルを受信すると受信する
with clientsocket:
print('Connected to: ', addr)
while True:
m = input("Command > ")
clientsocket.send(m.encode('utf-8'))
data = clientsocket.recv(10000)
if m == "exit":
clientsocket.close()
if m.split()[0] == 'get':
inp = input("Filename > ")
while True:
rbuf = clientsocket.recv(8192)
if not rbuf:
break
d = open(inp, "ab")
d.write(rbuf)
d.close()
elif data.decode('utf-8').split()[0] == "LIST":
print(data.decode('utf-8'))
if not data:
break
しかし、問題はここにある:
if m.split()[0] == 'get':
inp = input("Filename > ")
while True:
rbuf = clientsocket.recv(8192)
if not rbuf:
break
無限ループに陥っているように見えます。もっと興味深いのは、私が受け取ろうとしているファイルは88.3kbですが、ファイルが返すものはループに入っている間に非常に近いものです...
一度にpythonスクリプトを受け取ろうとしました同様に(ループなし)、それは正常に動作します。
は、ここでクライアントコードの一部です:
while True:
msg = s.recv(1024).decode('utf-8')
if msg.split()[0] == "list":
dirs = os.listdir(msg.split()[1])
string = ''
for dira in dirs:
string += "LIST " + dira + "\n"
s.send(string.encode('utf-8'))
elif msg == "exit":
break
else:
#bit that sends the file
with open(msg.split()[1], 'rb') as r:
s.sendall(r.read())
私はそれはデータがないときに閉じるように設定し、どのように私はできているのであれば、私の質問は、なぜそれが無限ループで立ち往生されていますこれを修正しますか?
私は一般的にネットワークプログラミングに新しいので、明らかに何かが間違っていたら私を許してください。
ありがとうございます!
try ... except ... ??? – chapelo
これは以前のデバッグ用で、もう必要ないと思います。 – Megalegacy