数据打包的艺术:Python Socket与小端字节序详解

在Python中实现Socket通信并使用小端字节模式(Little-Endian)进行数据传输,可以使用struct模块来打包和解包数据。以下是一个简单的示例,展示了如何在客户端和服务器之间使用小端字节模式进行通信。

服务器端代码

python

复制

import socket
import struct

def start_server():
    # 创建TCP/IP socket
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 绑定socket到本地地址和端口
    server_address = ('localhost', 12345)
    print(f"Starting server on {server_address}")
    server_socket.bind(server_address)
    
    # 监听连接
    server_socket.listen(1)
    
    while True:
        # 等待连接
        print("Waiting for a connection...")
        connection, client_address = server_socket.accept()
        try:
            print(f"Connection from {client_address}")
            
            # 接收数据
            data = connection.recv(1024)
            if data:
                # 使用小端字节模式解包数据
                unpacked_data = struct.unpack('<I', data)  # '<I'表示小端无符号整数
                print(f"Received data: {unpacked_data[0]}")
                
                # 发送响应
                response = struct.pack('<I', unpacked_data[0] + 1)  # 小端模式打包
                connection.sendall(response)
            else:
                break
        finally:
            # 关闭连接
            connection.close()

if __name__ == "__main__":
    start_server()

客户端代码

python

复制

import socket
import struct

def start_client():
    # 创建TCP/IP socket
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 连接服务器
    server_address = ('localhost', 12345)
    print(f"Connecting to {server_address}")
    client_socket.connect(server_address)
    
    try:
        # 发送数据
        message = 1234
        packed_message = struct.pack('<I', message)  # 小端模式打包
        print(f"Sending data: {message}")
        client_socket.sendall(packed_message)
        
        # 接收响应
        data = client_socket.recv(1024)
        unpacked_data = struct.unpack('<I', data)  # 小端模式解包
        print(f"Received response: {unpacked_data[0]}")
    
    finally:
        # 关闭连接
        client_socket.close()

if __name__ == "__main__":
    start_client()

代码说明

  1. 服务器端

    • 创建一个TCP/IP socket并绑定到本地地址和端口。

    • 监听连接并接受客户端连接。

    • 使用struct.unpack('<I', data)解包接收到的数据,'<I'表示小端无符号整数。

    • 发送响应时,使用struct.pack('<I', response)将数据打包为小端字节模式。

  2. 客户端

    • 创建一个TCP/IP socket并连接到服务器。

    • 使用struct.pack('<I', message)将数据打包为小端字节模式并发送。

    • 接收服务器响应并使用struct.unpack('<I', data)解包数据。

运行步骤

  1. 首先运行服务器端代码,等待客户端连接。

  2. 然后运行客户端代码,客户端将发送数据到服务器并接收响应。

注意事项

  • struct.packstruct.unpack中的格式字符串'<I'表示小端无符号整数。<表示小端字节序,I表示无符号整数(4字节)。

  • 你可以根据需要修改格式字符串来打包和解包其他类型的数据。

通过这种方式,你可以在Python中实现基于小端字节模式的Socket通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guzhoumingyue

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值