Python 实现服务器-客户端程序:持续发送全 0 数据流

本程序使用 Python 实现了一个服务器-客户端程序。服务端监听 5555 端口,接收客户端握手包后,构造一个速率为 1000bps 且内容为全 0 的数据流,以 UDP 协议向客户端的 6666 端口持续发送。

服务端代码

import socket
import time

SERVER_PORT = 5555
UDP_RATE = 1000
UDP_DATA = b'�' * 1024


def main():
    # 创建 TCP socket
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(('0.0.0.0', SERVER_PORT))
    server_socket.listen()

    print('Server started, listening on port', SERVER_PORT)

    # 等待客户端连接
    client_socket, client_address = server_socket.accept()
    print('Client connected:', client_address)

    # 接收握手包
    handshake_data = client_socket.recv(1024)
    print('Received handshake data:', handshake_data)

    # 解析握手包获取客户端 IP 和端口号
    client_ip = handshake_data.split(b':')[0]
    client_port = int(handshake_data.split(b':')[1])

    # 创建 UDP socket
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    # 持续发送数据流
    while True:
        udp_socket.sendto(UDP_DATA, (client_ip, client_port))
        time.sleep(1 / UDP_RATE)


if __name__ == '__main__':
    main()

客户端代码

import socket

SERVER_ADDRESS = '127.0.0.1'
SERVER_PORT = 5555
CLIENT_PORT = 6666
HANDSHAKE_DATA = b'Hello server!'


def main():
    # 创建 TCP socket
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((SERVER_ADDRESS, SERVER_PORT))

    # 发送握手包
    client_socket.send(HANDSHAKE_DATA)

    # 创建 UDP socket
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    udp_socket.bind(('0.0.0.0', CLIENT_PORT))

    # 接收数据流
    while True:
        data, server_address = udp_socket.recvfrom(1024)
        print('Received data from server:', data)


if __name__ == '__main__':
    main()

注意:

  • 客户端需要将自己的 IP 地址和端口号以 IP:端口号 的格式发送给服务器,作为握手包。
  • 服务器需要解析握手包,获取客户端的 IP 地址和端口号,以便发送数据流。
  • 程序中使用了 time.sleep() 来控制发送数据的速率。
  • 可以根据实际需要调整代码中的参数,例如 UDP_RATEUDP_DATA 的值。
Python实现服务器-客户端程序:持续发送全0数据流

原文地址: https://www.cveoy.top/t/topic/oB82 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录