【发布时间】:2016-11-08 17:29:32
【问题描述】:
我正在制作一个客户端-服务器程序,但客户端部分有问题。 问题在于无限接收数据。我已经在 python 解释器中测试了下面列出的这个特定的类。我已经成功(可能没有)连接到谷歌,但随后程序在 data = self.socket.recv(1024) 中的函数 recvData() 中停止
class client():
def __init__(self, host, port):
self.host = host
self.port = port
self.socket = self.connect()
self.command = commands()
def connect(self):
'''
Connect to a remote host.
'''
try:
import socket
return socket.create_connection((self.host, self.port))
except socket.error:
print(":: Failed to connect to a remote port : ")
def sendCommand(self, comm):
'''
Send command to remote host
Returns server output
'''
comman = comm.encode()
# for case in switch(comman):
# if case(self.command.RETRV_FILES_LIST.encode()):
# self.socket.send(b'1')
# return self.recvData()
# if case():
# print(":: Got wrong command")
if (comman == b'1'):
self.socket.send(b'1')
return self.recvData()
def recvData(self):
'''
Receives all the data
'''
i = 0
total_data = []
while(True):
data = self.socket.recv(1024)
if not data: break
total_data.append(data)
i += 1
if i > 9:
break
return total_data
关于评论部分: 我认为Case实现有问题,所以只使用了if-then语句。但事实并非如此。
【问题讨论】:
-
你打电话给
recvData,它会永远挂起? -
您能否添加更多关于运行代码结果的信息(您是否遇到异常?静默结束?挂起?),以及您期望的结果是什么?
-
是的,它会阻止接收数据
-
@glibdud 它以静默方式结束,当我使用 telnet 连接到谷歌并发送 '1' 它以 404 html 响应时,我想要的结果与 telnet 相同
-
这里没有足够的信息可以肯定地说,但我想服务器正在等待更多数据。如果您只是发送字符“1”,那么这不是一个完整(或有效)的 HTTP 请求。