首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python TCP套接字在recv中丢失数据[行为异常]

Python TCP套接字在recv中丢失数据[行为异常]
EN

Stack Overflow用户
提问于 2014-05-18 00:32:45
回答 3查看 3.2K关注 0票数 0

我在Python3.4中编写了一个用于读取数据的简单套接字客户端

我遇到的问题是,当服务器发送少量数据(大约1000)字节时,它会完美地读取它,但当处理大量数据(9500字节)时,它只会给我一小块数据(比如1100-ish块)。我似乎不明白为什么它在处理大量数据时表现得如此反复无常。我知道我的数据不会大于32767ssize_t最大值。

它在处理小数据时工作得很好,在处理大量数据时表现完全不同。我知道这在TCP服务器中不是问题,因为我用PHP TCP客户机对它进行了测试,在处理大量数据时它工作得很好。

任何帮助都是非常感谢的。

import socket
import json

# Written in Python 3.4.

class SocketClient:

    def __init__(self, host, port, format, timeout = None):
        # Constructor
        self.host = host
        self.port = port
        self.format = format
        self.timeout = timeout

        self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    def send(self, firstname, lastname, parameters = [], format = 'json'):
        if self.socket is not None:
            self.socket.connect((self.host, self.port))

            data = {}
            data['firstname'] = firstname
            data['lastname'] = lastname
            data['parameters'] = parameters
            data['format'] = format

            self.socket.send(bytes(json.dumps(data), "utf-8"))

            result = self.socket.recv(32767)
            result = result.decode()

            return result

    def shutdown(self):
        if socket is not None:
            self.socket.shutdown(socket.SHUT_RDWR)
            self.socket.close()


if __name__ == __main__:
    client = SocketClient("127.0.0.1", 8080, 'json')
    response = client.send('foo', 'bar', ['foobar'])
    print(response)
    client.shutdown()
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23713685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档