class TcpClient(object):
def __init__(self):
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.host = "127.0.0.1"
self.port = 3238
self.dataQueue = deque()
def connect(self, host: str = "127.0.0.1", port: int = 3238) -> (str, bool):
self.host = host
self.port = port
# Connect to the remote host and port
print("start sim TcpClient ... ")
try:
self.sock.connect((self.host, self.port))
except Exception as e:
print(e)
return e.args[1], False
return "", True
def start(self):
# send register info
msg_type = '1'
msg_len = 9
id = 0
reg_data = msg_type.encode() + \
msg_len.to_bytes(4, byteorder='little', signed=True) + \
id.to_bytes(4, byteorder='little', signed=True)
self.sock.send(reg_data)
ptl_header_len = 4 # 包头用 4 个字节长度表示
alldata = b""
while True:
while True:
if len(alldata) < ptl_header_len: # 一直到包头字节流全部接收完成
alldata += self.sock.recv(4)
if not alldata: # 收到服务器的套接字的 close 消息
self.sock.close()
return
else:
header = int.from_bytes(alldata[:ptl_header_len], byteorder='little') # 反序列化包头
body_len = header
print("recv header :", body_len)
break
while True:
recv_all_len = ptl_header_len + body_len
if len(alldata) < recv_all_len: # 一直到包内容的字节流全部接收完成
alldata += self.sock.recv(recv_all_len - len(alldata))
continue
else:
body_data = alldata[ptl_header_len: recv_all_len]
print("recv body len :", len(body_data))
self.dataQueue.append(body_data)
alldata = b""
break
def close(self):
# Terminate
self.sock.close()