hisock (HiSock, Hisock)
A higher level extension of Python's built-in socket module, with simpler and more efficient usages.
Documentation
Documentation is located on ReadTheDocs. Some documentation is also located in the code as docstrings, though most are already well-documented on ReadTheDocs.
Installation
Hisock only supports Python versions 3.7 and onwards, due to annotations from the __future__ module.
hisock is available on PyPI here, so it is installable by pip. Just do the following command.
$ python -m pip install hisock (WINDOWS)
OR
$ pip3 install hisock (MAC/LINUX)
To build the bleeding-edge version of hisock from GitHub, download the repository with your favorite way, cd into it, then type:
$ python -m pip install -e . (WINDOWS)
OR
$ pip3 install -e . (MAC/LINUX)
Note that you MUST cd into the cloned directory for this to work.
Code of Conduct and Contributing Guidelines:
Examples
hisock utilizes decorators as the core of receiving messages instead of having
if statements handling all of the logic.
More in-depth examples are located in the examples directory, including a tic-tac-toe game. Here is what a basic
server script would look like using hisock:
Server
import sys
import time
import random
from hisock import start_server, get_local_ip
ADDR = get_local_ip()
PORT = 6969
if len(sys.argv) == 2:
ADDR = sys.argv[1]
if len(sys.argv) == 3:
PORT = int(sys.argv[2])
print(f"Serving at {ADDR}")
server = start_server((ADDR, PORT))
@server.on("join")
def client_join(client_data):
print(f"Cool, {client_data.ip_as_str} joined!")
if client_data['name'] is not None:
print(f" - With a sick name \"{client_data.name}\", very cool!")
if client_data['group'] is not None:
print(f" - In a sick group \"{client_data.group}\", cool!")
print("I'm gonna send them a quick hello message")
server.send_client(client_data['ip'], "hello_message", str(time.time()).encode())
@server.on("processing1")
def process(client_data, process_request: str):
print(f"\nAlright, looks like {client_data.ip_as_str} received the hello message, "
"\nas now they're trying to compute something on the server, because they have "
"potato computers")
print("Their processing request is:", process_request)
for _ in range(process_request.count("randnum")):
randnum = str(random.randint(1, 100000000))
process_request = process_request.replace("randnum", randnum, 1)
result = eval(process_request) # Insecure, but I'm lazy, so...
print(f"Cool! The result is {result}! I'mma send it to the client")
server.send_client(client_data, "something", str(result))
server.start()
Client
import time
from hisock import connect, get_local_ip
server_to_connect = input("Enter server IP to connect to (Press enter for default of your local IP): ")
port = input("Enter Server port number (Press enter for default of 6969): ")
if server_to_connect == '':
server_to_connect = get_local_ip()
if port == '':
port = 6969
else:
port = int(port)
name = input("Name? (Press enter for no name) ")
group = input("Group? (Press enter for no group) ")
print("======================================= ESTABLISHING CONNECTION =======================================")
if name == '':
name = None
if group == '':
group = None
client = connect(
(server_to_connect, port),
name=name, group=group
)
join_time = time.time()
@client.on("hello_message")
def handle_hello(msg: str):
print("Thanks, server, for sending a hello, just for me!")
print(f"Looks like, the message was sent on timestamp {msg}, "
f"which is just {round(float(msg) - join_time, 6) * 1000} milliseconds since the connection!")
print("In response, I'm going to send the server a request to do some processing")
client.send("processing1", b"randnum**2")
result = client.recv("something", int)
print(f"WHOAAA! The result is {result}! Thanks server!")
client.start()
Contributors
Special thanks to the following:
- Sheepy0125, for refactoring the underhood code as well as the API
- SSS-Says-Snek, for maintaining and developing the library
- Ankith26, for helping me understand the usages of headers
Copyright SSS-Says-Snek, 2021-present
Metadata
Release files for hisock 2.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hisock-2.0.2.tar.gz | 50.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hisock-2.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 102.4 kB
Release files / hisock-2.0.2.tar.gz
| Download URL | hisock-2.0.2.tar.gz |
|---|---|
| Size | 50.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a6a459dd3a21e8ae101f5340987169952480d3f97b371a33cb94bee413da06ef
|
|
BLAKE2b-256 checksum How to use checksums |
0ec94d06c6e5dcb96c3946b93e56071e7d8ee82caac5f7aeaa35d7d6d99d74b6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.9.0
|
Release files / hisock-2.0.2-py3-none-any.whl
| Download URL | hisock-2.0.2-py3-none-any.whl |
|---|---|
| Size | 51.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3545fa604355d13085497b60daa6cf514bcf44000e05e61c1dcd1884e03d49c4
|
|
BLAKE2b-256 checksum How to use checksums |
284be6f1e468ae6b61f9852c0edf30b19f9d277fc811266bb614465b4f5f2ab8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.51.0 CPython/3.9.0
|