Socket simply simulates TCP client

Brief description

The program simply simulates the process of TCP client connection, sending data, receiving data, and closing the connection

Network debugging assistant as a server

Network debugging assistant

The program simulates a TCP client

Code

# TCP客户端

import time
# 导入socket模块
import socket


class TcpClient(object):
    """TCP客户端"""
    def __init__(self, connect_ip="127.0.0.1", connect_port=8080):
        # 创建TCP套接字
        self.tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 要连接的TCP服务器的IP和端口
        self.server_address = (connect_ip, connect_port)

    def connect_to_server(self):
        """连接服务器"""
        self.tcp_client_socket.connect(self.server_address)

    def send_message(self, messages="This message is send from tcp_client", code="utf-8"):
        """经过编码后,发送数据给服务端"""
        self.tcp_client_socket.send(messages.encode(code))

    def recv_message(self, code="utf-8", recv_bytes=1024):
        """
        接收服务端发送过来的数据,并解码
        :param code: 要解码的编码类型
        :param recv_bytes: 接收字节数
        :return: 返回接收到的解码后的信息或者是None值
        """
        print("客户端正在等待接收服务端的数据......")
        # 客户端接收服务端的数据
        recv_data = self.tcp_client_socket.recv(recv_bytes)
        # 当有接收到数据时:
        if recv_data:
            try:
                # 对接收的数据进行解码
                recv_message = recv_data.decode(code)
            # 解码失败时:
            except UnicodeDecodeError as error:
                # 解码失败时的处理
                raise Exception("{}解码失败,错误信息:【{}】".format(code, error))
            # 当没有报错时:
            else:
                return recv_message
        # 当recv_data的数据为空时, 对方关闭了连接,即服务端调用了close()方法
        else:
            return None

    def close_connect(self):
        """关闭客户端的与服务端的连接"""
        self.tcp_client_socket.close()

    def start_up(self):
        """开启客户端的运行"""
        # 连接服务端
        self.connect_to_server()
        # 向服务端发送消息
        self.send_message(messages="这是客户端发送的信息{}".format(time.time()), code="gbk")
        # 接收服务端的消息
        recv_message = self.recv_message(code="gbk")
        if recv_message:
            print("客户端接收到的消息是:【{}】".format(recv_message))
        else:
            print("服务端主动关闭了连接")
        # 关闭与服务器的连接
        self.close_connect()


if __name__ == '__main__':
    while True:
        try:
            # 客户端尝试连接服务端
            TcpClient().start_up()
        except Exception as error_info:
            print("错误详情:【{}】".format(error_info))
        # 休眠
        time.sleep(2)

running result

Insert picture description here

Guess you like

Origin blog.csdn.net/u010684603/article/details/107853404