OBE_Socket class

class optbayesexpt.obe_socket.Socket(role, ip_address='127.0.0.1', port=61981)[source]

Bases: object

Handles TCP communications

The Socket can be configured either as a ‘server’ or a ‘client’. Server sockets wait for connections, receive messages and send replies. Client sockets initiate connections and receive replies.

The message protocol uses messages formatted as JSON strings, each prependend by the string length as a zero-padded, 10-digit decimal number. The general form is

dddddddddd<JSON-formatted string>

Command messages from the client use a JSON object:

dddddddddd{“command”: <command_str>[, <label_str>: <value_str>[, …]].

Example messages
  • 0000000038{"command": "goodset", "pickiness": 4}

  • 0000000019{"command": "done"}

  • 0000000004"OK"

Parameters:
  • role (str) – either ‘client’ to configure the Socket to initiate communications or ‘server’ to listen and respond.

  • ip_address (str) – Identifies the computer host to communicate with. The default of ‘127.0.0.1’ is the localhost, enabling communications between processes on the host computer.

  • port (int) – the TCP port used for communications. The default value 61981 was chosen chosen randomly in the unassigned port range 49152 to 65535.

server

for the ‘server’ role, a socket.socket object configured to listen and accept connections

connection

for the ‘client’ role, a socket.socket object configured to initiate connections and send messages

close()[source]

Close the communication connection.

Only clients need to close connections once they’re done communicating. No need to call this for servers.

receive()[source]

Wait for and process messages on the TCP port

Blocks until a connection is made, then reads the number of bytes specified in the first 10 characters. Reads the connection until the full message is received, then decodes the messages string.

Returns:

The message string decoded and repackaged as a python object

send(contents)[source]

Formats and sends a message

This method formats the contents argument into the message format, opens a connection and sends the contents as a message.

Parameters:

contents – Any JSON format-able object. Briefly, python’s str, int, float, list, tuple, and dict objects.

Important

json.dumps() is not able to format numpy arrays. To send numpy arrays, the numpy.tolist() method is a convenient way to list-ify a numpy array. For example:

mySocket.send(myarray.tolist())
tcpcmd(command)[source]

Sends a command and receives a response.

Run from a client socket, this method sends a command message and receives a response. The connection is then closed.

Parameters:
  • command – a JSON-ifiable python object to be interpreted by the

  • recipient.

Returns:

a pyhton object decoded from the reply message