# -*- coding: utf-8 -*- """ @author:zhaiht @file: TCPclient.py @time: 2020/9/28 17:55 @desc: """ import socket import logging class TCPClient(object): """用于测试socket请求""" def __init__(self, domain, port, timeout=30, max_receive=102400): self.domain = domain self.port = port self.connected = 0 # 连接后置为1 self.max_receive = max_receive self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self._sock.settimeout(timeout) def connect(self): """连接指定IP、端口""" if not self.connected: try: self._sock.connect((self.domain, self.port)) except socket.error as e: logging.exception(e) else: self.connected = 1 logger.debug('TCPClient connect to {0}:{1} success.'.format(self.domain, self.port)) def send(self, data, dtype='str', suffix=''): """向服务器端发送send_string,并返回信息,若报错,则返回None""" if dtype == 'json': send_string = json.dumps(data) + suffix else: send_string = data + suffix self.connect() if self.connected: try: self._sock.send(send_string.encode()) logger.debug('TCPClient Send {0}'.format(send_string)) except socket.error as e: logger.exception(e) try: rec = self._sock.recv(self.max_receive).decode() if suffix: rec = rec[:-len(suffix)] logger.debug('TCPClient received {0}'.format(rec)) return rec except socket.error as e: logger.exception(e) def close(self): """关闭连接""" if self.connected: self._sock.close() logger.debug('TCPClient closed.')