43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
import socket as s
|
|
from SocketClient import SocketClient
|
|
from select import select
|
|
|
|
|
|
class TCPClient(SocketClient):
|
|
def Connect(self) -> bool:
|
|
self.socket = s.socket(s.AF_INET, s.SOCK_STREAM)
|
|
try:
|
|
self.socket.connect((self.ip, self.port))
|
|
except ConnectionRefusedError:
|
|
self.logger.fatal("TCP_FATAL_CONNECT %s:%d" % (self.ip, self.port))
|
|
return False
|
|
|
|
self.socket.setblocking(False)
|
|
return True
|
|
|
|
def Reconnect(self) -> bool:
|
|
self.socket.close()
|
|
return self.Connect()
|
|
|
|
def Send(self, data: str):
|
|
try:
|
|
self.socket.sendall(data.encode())
|
|
self.logger.info("TCP_SENT %s" % data)
|
|
self.Receive()
|
|
except Exception as ex:
|
|
self.logger.fatal("TCP_FATAL_SEND %s" % ex)
|
|
|
|
def Receive(self):
|
|
(incoming, _, _) = select([self.socket], [], [], 0)
|
|
if incoming:
|
|
try:
|
|
data = self.socket.recv(1024)
|
|
if not data:
|
|
self.socket.close()
|
|
self.logger.error("TCP_NO_DATA")
|
|
return
|
|
self.logger.info("TCP_SUCCESS %s" % data.decode())
|
|
except InterruptedError as ex:
|
|
self.logger.error("TCP_FAIL %s" % ex)
|
|
self.Reconnect()
|