Client server base class over socket
Project description
- website: https://arrizza.com/python-socket-oneline
- installation: see https://arrizza.com/setup-common
Summary
This module contains a simple base class for handling sockets
The communication protocol has these basic rules:
- socket based using TCPIP; only one server per port
- only one client connected at any time. When that client disconnects, another client is allowed to connect.
- a "packet" is terminated by a line feed (0x0A).
- a client sends a packet (aka "command") to the server.
- Alternatively the server may respond with zero, one or more packets (aka "responses")
- The server cannot initiate a response asynchronously by itself i.e. it must wait for an incoming command to send any packets to the client.
- the following commands are predefined:
- "ping" : the server will respond with "pong". The client can use this to confirm that the socket and communication channel are alive and responsive
- "disconnect" : the server will initiate a disconnect from the current client
- "shutdown" : the server will disconnect and then shutdown
- "invalid" - the server has caught an exception when converting the incoming packet to ASCII (e.g. decode ('utf-8'))
More details
- The server reads the incoming characters from the client one character at a time.
- Once it sees the 0x0A character, it sets up a string buffer of all ASCII characters seen so far (less the 0x0A) and calls a callback function with that string.
- The user must define that callback function.
- The following is up to the user to define:
- Which incoming commands are legal
- What response to send if an illegal command is received
- What response or responses should be sent for all legal commands
- Determine whether an empty string is a legal command
- How to handle the scenario when a linefeed needs to be part of a command
- How to handle non-ASCII scenarios e.g. Unicode or byte strings.
Scripts
- See Quick Start for information on using scripts.
- See xplat-utils submodule for information on the submodule.
Sample code
see the sample directory for a sample client and server. Use doit script to run the sample server.
./doit
- starts a server as a background process
- starts a client and sends various commands to the server
- stops that client
- starts another client
- sends some additional commands to the server
- asks the server to shutdown
Other scripts and files
- do_doc: generates doxygen
- do_install: installs python environment
- do_lint: runs static analysis tools
- do_publish: publish the python module
- do_ver: runs verification scripts
- doit: runs a sample client & server
- srs.json: holds a list of requirements the client/server must adhere to
- test_ver.py: run by do_ver to perform verification
- todo.md known issues to fix/address
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
socket_oneline-0.0.22.tar.gz
(47.2 kB
view details)
File details
Details for the file socket_oneline-0.0.22.tar.gz
.
File metadata
- Download URL: socket_oneline-0.0.22.tar.gz
- Upload date:
- Size: 47.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.14
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8cbe366fd489a113c62ed6b7431ba09b398cff805c9ee462b749dd91d3009eab |
|
MD5 | 539f4bed55b74f20f6ec0100349ae830 |
|
BLAKE2b-256 | b57049b95113386fa35ae69e3adc0a3078bd74dcfe6e233c0608d4df40a102b7 |