2014-11-24 63 views
0

Python的socket发送不发送我有麻烦了整个字符串

def main(): 
while True: 
    command = raw_input('COMMAND >> ') 
    s.sendall(command) 
    data = s.recv(4096) 
    print(data+'\n\n') 

而我只收到我发送的部分数据。 我已经尝试在s.recv上设置更多字节,但这并没有真正帮助,问题依然存在。

什么似乎是问题?

+0

你为什么不使用sendall()的客户端部分吗? – Eugen 2014-11-24 22:44:05

+0

试过了,但问题仍未解决。 – 2014-11-24 22:53:50

回答

1

参考文档https://docs.python.org/2/library/socket.html#socket.socket.send“应用程序负责检查是否发送了所有数据;如果只传输了部分数据,则应用程序需要尝试传送剩余的数据。”

检查从c.send(proc)返回的值为发送的总字节数,如果需要发送更多。

E.g.如果你发送了100个字符,并且c.send(data)返回40,那么你需要调用c.send(data [40:]),依此类推。

或者,你也许能/想用sendall:https://docs.python.org/2/library/socket.html#socket.socket.sendall

+0

所以,我不能只设置c.send(proc [0:])?每当我收到一个字符串时,我必须检查缺少多少字节? – 2014-11-24 22:28:58

+0

发件人(客户)有责任检查一切已发送,并且接收者(服务器)负责阅读它需要的内容。它看起来像你试图通过一个原始套接字发送结构化数据,你可能想看看使用一个简单的RPC框架,因为这将为你处理很多东西。例如,https://docs.python.org/2/library/xmlrpclib.html – 2014-11-24 22:32:57

+0

姆姆。谢谢。我会仔细研究一下。 – 2014-11-24 22:37:29