【发布时间】:2017-03-27 15:37:11
【问题描述】:
我正在尝试编写一个 Python 程序,如果客户端连接到服务器,它可以浏览目录并使用套接字抓取文件。浏览部分工作正常,它打印出客户端的所有目录。 以下是部分代码:
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,但是文件在循环中返回的是87kb,非常接近……
我也尝试过一次接收一个 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())
所以我的问题是,如果我将它设置为在没有数据时关闭,为什么它会陷入无限循环,我该如何解决这个问题?
总的来说,我对网络编程有点陌生,所以如果我遗漏了一些明显的东西,请原谅我。
谢谢!
【问题讨论】:
-
尝试...除了... ???
-
之前那个是调试用的,估计不用了。