python socket读取不定长全部数据
时间: 2024-08-13 16:07:59 浏览: 96
python3 读取Excel表格中的数据
5星 · 资源好评率100%
在Python中,使用socket进行网络通信时,当接收的数据长度是不确定的,可以采用分块读取(iterating over the received data)的方式。通常,你可以创建一个循环,每次读取固定大小的数据(如缓冲区大小),直到接收到空字符(如'\0'或者'\n')或者达到预期的完整数据长度。以下是一个简单的示例:
```python
import socket
def receive_all(socket_connection, buffer_size=4096):
total_data = b''
while True:
chunk = socket_connection.recv(buffer_size)
if not chunk: # 如果接收为空或连接关闭
break
total_data += chunk
return total_data.decode('utf-8') # 如果数据是文本,记得解码
# 创建一个socket实例
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 12345))
server_socket.listen()
client_socket, addr = server_socket.accept()
try:
received_data = receive_all(client_socket)
print(f"Received data: {received_data}")
except Exception as e:
print(f"Error occurred: {e}")
# 关闭连接
client_socket.close()
server_socket.close()
```
在这个例子中,`receive_all`函数会持续接收数据,直到没有更多数据可接。然后将所有接收到的块连接起来。如果在网络传输中遇到问题,比如连接断开,`recv`函数会返回空字符串,从而结束循环。
阅读全文