Metadata-Version: 2.1
Name: socket-for-humans
Version: 0.0.2
Summary: A simplified socket setup suitable for many/most lightweight client server programs. The Python standard library TCP/IP socket module has a relatively steep learning curve. This module is intended to help get most projects up and running quickly by wrapping the standard library socket module in an easy to use interface.
Home-page: https://gitlab.com/koyaanisqatsi.naqoyqatsi1/socket_for_humans
Author: koyaanisqatsi.naqoyqatsi@pm.me
Author-email: koyaanisqatsi.naqoyqatsi@pm.me
License: MIT
Keywords: networking,TCP/IP,simplified,client,server,socket
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Topic :: System :: Networking
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Description-Content-Type: text/markdown

# socket_for_humans
A simplified socket setup suitable for many/most lightweight client server programs. The python standard library socket module has a relatively steep learning curve. This module will help get most projects up and running quickly by wrapping the Python standard library socket module in an easy to use interface.

`socket_for_humans` is the communications module used in the `simple_gossip` python gossip protocol.

socket_for_humans provides two types of objects `Server` and `Connection`. The `Server` object is used to listen for new connections, while the `Connection` object is used for sending and receiving on both sides of the socket communications once a connection is established.

By default the send and receive functions take/return `str` rather than `bytes`, which is probably what most users initially want, if you want bytes then use `str_mode=False` in the object constructors.

## Usage:

Essential usage follows this pattern:

### Example server code:
```python
from socket_for_humans import Server

addr = ('127.0.0.1', 12345)
my_server = Server(addr)
while True:
    msg, conn, addr = my_server.get_next()
    # msg is the msg recieved by the server.
    # conn is a Connection instance used to continue rend and receive with client
    # addr is the clients address like (ip, port)
    if msg:
        # do whatever you need to do with received msg
        print(msg)
        conn.send("here is my reply")
        msg2 = conn.recv()
        print(msg2)
        conn.send("here is my further reply, if you really want to know")
        # continue to use conn to send and receive until the purpose is satisfied.
        conn.close()
```
### Example client code:

```python
from socket_for_humans import Connection

addr = ('127.0.0.1', 12345)
my_client = Connection(addr)

msg = "a question to the server"
print("Client sending: " + msg)
my_client.send(msg)
reply = my_client.recv()
print("Client received: " + reply)

msg2 = "a further question to the server"
print("Client sending: " + msg2)
my_client.send(msg2)
reply2 = my_client.recv()
print("Client received: " + reply2)
# continue to use my_client to send and receive until the purpose is satisfied.
my_client.close()
```

