【问题标题】:Python socket send doesn't send the whole stringPython套接字发送不发送整个字符串
【发布时间】:2015-01-22 18:39:34
【问题描述】:

当我尝试通过 LAN 将字符串从客户端发送到服务器时遇到问题

客户端代码:

def p():
os.system('tasklist > p.txt')
f = open('p.txt', 'r+')
proc = '''
       '''
for line in f:
    proc+=(line+'\b')

c.send(proc)

服务器代码:

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

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

似乎是什么问题?

【问题讨论】:

  • 为什么你不使用 sendall() 也用于客户端部分?
  • 试过了,问题还是没有解决。

标签: python string sockets python-2.7 send


【解决方案1】:

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

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

例如如果发送 100 个字符,而 c.send(data) 返回 40,则需要调用 c.send(data[40:]),以此类推。

或者,您可能能够/想要使用 sendall:https://docs.python.org/2/library/socket.html#socket.socket.sendall

【讨论】:

  • 所以,我不能只设置 c.send(proc[0:])?每当我收到一个字符串时,我必须检查丢失了多少字节?
  • 发送者(客户端)负责检查所有内容是否已发送,接收者(服务器)负责读取所需内容。看起来您正在尝试通过原始套接字发送结构化数据,您可能希望使用简单的 RPC 框架来代替,因为它会为您处理很多事情。例如,docs.python.org/2/library/xmlrpclib.html
  • 嗯。谢谢你。我会研究一下。
  • sendall(data) 救了我的命
猜你喜欢
  • 1970-01-01
  • 2014-02-09
  • 1970-01-01
  • 1970-01-01
  • 2020-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多