首页 > 编程知识 正文

Python socket接收不定长数据

时间:2023-11-22 06:01:36 阅读:288133 作者:MTML

本文将从多个方面对Python socket接收不定长数据做详细的阐述,为Python开发工程师带来全面的指引。

一、套接字(socket)概述

在开始探讨Python socket接收不定长数据之前,我们先来了解一下socket。

套接字,也称为socket,是进行网络编程的底层操作,Python提供了socket模块作为网络编程的基础组件。socket模块将很多底层操作进行了封装,使得开发者可以用更简单的方式实现网络应用。

二、Python socket接收不定长数据的三种方式

Python socket接收不定长数据的方式主要有三种,分别是:

  • 固定长度接收:指定每次接收的数据长度,当数据长度达到指定长度或连接关闭时停止接收。
  • 按行接收:当数据中包含行结束符时停止接收。
  • 按分隔符接收:指定分隔符,当数据中包含分隔符时停止接收。

1. 固定长度接收

固定长度接收方式是指在接收数据时,指定每次接收的数据长度,当数据长度达到指定长度或连接关闭时停止接收。

下面是Python socket固定长度接收的示例代码:


import socket

HOST = '127.0.0.1'
PORT = 8888

# 创建套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
s.connect((HOST, PORT))

while True:
    # 接收固定长度的数据
    data = s.recv(1024)
    if not data:
        break
    print('Received', repr(data))

# 关闭套接字
s.close()

该示例代码中,将每次接收的数据长度指定为1024字节。当接收到的数据长度小于1024字节时,则表示接收完成。

2. 按行接收

按行接收方式是指当数据中包含行结束符时停止接收。行结束符可以是CR(回车符)、LF(换行符)或者CRLF(回车符+换行符)。

下面是Python socket按行接收的示例代码:


import socket

HOST = '127.0.0.1'
PORT = 8888

# 创建套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
s.connect((HOST, PORT))

while True:
    # 接收一行数据
    data = s.makefile('rb').readline().strip()
    if not data:
        break
    print('Received', repr(data))

# 关闭套接字
s.close()

该示例代码中,使用了makefile()方法将socket对象转换成文件对象,然后调用readline()方法进行按行接收。注意,在使用makefile()方法时指定了模式为'rb',表示以二进制格式打开文件。

3. 按分隔符接收

按分隔符接收方式是指指定分隔符,当数据中包含分隔符时停止接收。

下面是Python socket按分隔符接收的示例代码:


import socket

HOST = '127.0.0.1'
PORT = 8888

# 创建套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
s.connect((HOST, PORT))

while True:
    # 接收数据直到出现分隔符
    data = b''
    while b'rn' not in data:
        packet = s.recv(1024)
        if not packet:
            break
        data += packet
    if not data:
        break
    print('Received', repr(data))

# 关闭套接字
s.close()

该示例代码中,定义了一个循环,每次接收1024字节的数据,直到出现了rn分隔符为止。如果接收到的数据是空,表示数据已经接收完成。

三、小结

Python socket是进行网络编程的基础组件,Python socket接收不定长数据的方式主要有三种,分别是固定长度接收、按行接收、按分隔符接收。开发者可以根据实际需求选择适合的方式进行数据接收操作。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。