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
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)