BOSWatch 3
Python Script to receive and decode German BOS Information with rtl_fm and multimon-NG
 
Loading...
Searching...
No Matches
boswatch.network.client.TCPClient Class Reference

TCP client class. More...

Public Member Functions

 __init__ (self, timeout=3)
 Create a new instance.
 
 connect (self, host="localhost", port=8080)
 Connect to the server.
 
 disconnect (self)
 Disconnect from the server.
 
 transmit (self, data)
 Send a data packet to the server.
 
 receive (self, timeout=1)
 Receive data from the server.
 
 isConnected (self)
 Property of client connected state.
 

Protected Attributes

 _sock
 

Detailed Description

TCP client class.

Constructor & Destructor Documentation

◆ __init__()

boswatch.network.client.TCPClient.__init__ (   self,
  timeout = 3 
)

Create a new instance.

Parameters
timeouttimeout for the client in sec. (3)
29 def __init__(self, timeout=3):
30 r"""!Create a new instance
31
32 @param timeout: timeout for the client in sec. (3)"""
33 socket.setdefaulttimeout(timeout)
34 self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
35

Member Function Documentation

◆ connect()

boswatch.network.client.TCPClient.connect (   self,
  host = "localhost",
  port = 8080 
)

Connect to the server.

Parameters
hostServer IP address ("localhost")
portServer Port (8080)
Returns
True or False
36 def connect(self, host="localhost", port=8080):
37 r"""!Connect to the server
38
39 @param host: Server IP address ("localhost")
40 @param port: Server Port (8080)
41 @return True or False"""
42 try:
43 if not self.isConnected:
44 self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
45 self._sock.connect((host, port))
46 logging.debug("connected to %s:%s", host, port)
47 return True
48 logging.warning("client always connected")
49 return True
50 except socket.error as e:
51 logging.error(e)
52 return False
53

◆ disconnect()

boswatch.network.client.TCPClient.disconnect (   self)

Disconnect from the server.

Returns
True or False
54 def disconnect(self):
55 r"""!Disconnect from the server
56
57 @return True or False"""
58 try:
59 if self.isConnected:
60 self._sock.shutdown(socket.SHUT_RDWR)
61 self._sock.close()
62 logging.debug("disconnected")
63 return True
64 logging.warning("client always disconnected")
65 return True
66 except socket.error as e:
67 logging.error(e)
68 return False
69

◆ transmit()

boswatch.network.client.TCPClient.transmit (   self,
  data 
)

Send a data packet to the server.

Parameters
datadata to send to the server
Returns
True or False
70 def transmit(self, data):
71 r"""!Send a data packet to the server
72
73 @param data: data to send to the server
74 @return True or False"""
75 try:
76 logging.debug("transmitting:\n%s", data)
77 data = data.encode("utf-8")
78 header = str(len(data)).ljust(HEADERSIZE).encode("utf-8")
79 self._sock.sendall(header + data)
80 logging.debug("transmitted...")
81 return True
82 except socket.error as e:
83 logging.error(e)
84 return False
85

◆ receive()

boswatch.network.client.TCPClient.receive (   self,
  timeout = 1 
)

Receive data from the server.

Parameters
timeoutto wait for incoming data in seconds
Returns
received data
86 def receive(self, timeout=1):
87 r"""!Receive data from the server
88
89 @param timeout: to wait for incoming data in seconds
90 @return received data"""
91 try:
92 read, _, _ = select.select([self._sock], [], [], timeout)
93 if not read: # check if there is something to read
94 return False
95
96 header = self._sock.recv(HEADERSIZE).decode("utf-8")
97 if not len(header): # check if there data
98 return False
99
100 length = int(header.strip())
101 received = self._sock.recv(length).decode("utf-8")
102
103 logging.debug("recv header: '%s'", header)
104 logging.debug("received %d bytes: %s", len(received), received)
105 return received
106 except socket.error as e:
107 logging.error(e)
108 return False
109

◆ isConnected()

boswatch.network.client.TCPClient.isConnected (   self)

Property of client connected state.

111 def isConnected(self):
112 r"""!Property of client connected state"""
113 try:
114 if self._sock:
115 _, write, _ = select.select([], [self._sock], [], 0.1)
116 if write:
117 data = "<keep-alive>".encode("utf-8")
118 header = str(len(data)).ljust(HEADERSIZE).encode("utf-8")
119 self._sock.sendall(header + data)
120 return True
121 return False
122 except socket.error as e:
123 if e.errno != 32:
124 logging.exception(e)
125 return False
126 except ValueError:
127 return False

Field Documentation

◆ _sock

boswatch.network.client.TCPClient._sock
protected