android tcp socket 丢数据,Python TCP套接字在recv中丢失数据[行为怪异]

我编写了一个简单的socket客户机来读取python3.4中的数据

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

它在处理小数据时工作得很好,而在处理大量数据时则完全不同。我知道这在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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCP套接字编程是一种网络编程技术,用于在计算机网络建立TCP连接并进行数据传输。下面是一个简单的示例,展示了如何使用Pythonsocket库进行TCP套接字编程: ```python import socket # 创建一个TCP套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定套接字到特定的IP地址和端口号 server_address = ('localhost', 8000) sock.bind(server_address) # 监听连接请求 sock.listen(1) while True: print('等待连接...') # 接受客户端的连接请求 client_sock, client_address = sock.accept() try: print('接受来自', client_address, '的连接') # 接收客户端发送数据 data = client_sock.recv(1024) print('接收到的数据:', data.decode()) # 向客户端发送响应数据 response = 'Hello, client!' client_sock.sendall(response.encode()) finally: # 关闭客户端套接字 client_sock.close() ``` 上述示例代码,首先创建了一个TCP套接字,并通过bind()方法绑定到一个特定的IP地址和端口号。然后使用listen()方法开始监听连接请求。接下来使用accept()方法接受客户端的连接请求,并创建一个新的套接字用于与客户端通信。 在循环,可以通过recv()方法接收客户端发送数据,并使用sendall()方法向客户端发送响应数据。最后使用close()方法关闭客户端套接字。 这只是一个简单的示例,TCP套接字编程还可以实现更复杂的功能,如多线程处理多个客户端连接、错误处理等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值