多线程TCP服务器/客户端

sockdot的Python项目详细描述


插座

简化的tcp网络库

注意:这不是websocket

sockdot允许您创建服务器/客户端应用程序,而不必在应用程序中使用web标准协议。该库是一个线程化的tcp套接字,允许使用事件,使其易于在服务器/客户机应用程序中使用。我创建这个库是为了满足我在局域网软件项目中的需要,所以不能对其他人有用:)。在

安装

pip install sockdot

从源安装。在

^{pr2}$

用法

在服务器.py

fromsockdotimportServerfromsockdot.eventsimportEventserverevents=Event()server=Server(debug=True)@serverevents.eventdefon_data_recieved(client,data):print("recieved:",data)server.send(client,f"you said {data}")@serverevents.eventdefon_connection_open(client):print(f"client {client} joined")@serverevents.eventdefon_connection_close(client):print(client,"closed connection")@serverevents.eventdefon_server_destruct():print("server shutdown")@serverevents.eventdefon_error(exception,message):# print(f"error {exception} occured, message:", message)pass@serverevents.eventdefon_port_changed(port):print("server changed port to",port)@serverevents.eventdefon_running_changed(running):print("server is running"ifrunningelse"server is not running")server.updateevent(serverevents)server.run()

<;small>;服务器在计算机的主机名上运行<;/small>

fromsockdotimporthostprint(host())# outputs ["host_name", "host_ip"]

在客户端.py在

importtime,threadingfromsockdotimportClientfromsockdot.eventsimportEventclientevents=Event()client=Client(host="rubbie-io",debug=True)defstart(connected):ifconnected:foriinrange(10):client.send(str(i))time.sleep(4)client.close()@clientevents.eventdefon_data_recieved(data):print(f"got {data} from server")@clientevents.eventdefon_connected_changed(connected):threading.Thread(target=start,args=(connected,)).start()@clientevents.eventdefon_error(exception,message):print(f"error {exception} occured, message:",message)@clientevents.eventdefon_host_changed(host):pass@clientevents.eventdefon_port_changed(port):pass@clientevents.eventdefon_handshake_started():pass@clientevents.eventdefon_handshake_ended(result):passclient.updateevent(clientevents)client.connect()

添加authentication

创建一个文件,“.auth”,可以是任何您想要的,但是在我的例子中,我将它命名为“.auth”。该文件包含json格式的安全参数的键和值。在

{"SECURITY_KEY":"secret key","WHITELIST":[],"BLACKLIST":[],"USE_WHITELIST":false}

在服务器.py,进行此更改:
注意,在python字典中也可以使用auth设置,use可以使用任何一个。auth关键字参数可以是str(文件名)类型或dict(auth dictionary)。在

# from file...server=Server(debug=True,auth=".auth")# from dictionaryserver=Server(debug=True,auth={"SECURITY_KEY":"secret key","WHITELIST":[],"BLACKLIST":[],"USE_WHITELIST":False})

在客户端.py,进行此更改:

client.connect(authkey="secret key")

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为游戏添加声音。需要帮助   java在获取数据时忽略模型类中的forign键映射   java为什么Microsoft JDBC驱动程序忽略failoverPartner主机名   java可以下载mozswing文件   java等价于ObjectOutputStream,不仅保存其状态,还保存整个对象?   Java Android LiveData根据其他LiveData调用房间查询   java如何使用jackson jsonNode实现这一点并获得所需的输出   在web服务器上作为web应用程序运行java应用程序?   groovy中java类的元类属性   返回空指针的java图形对象   标头中包含用户名和密码的java SOAP客户端请求   具有堆栈实现和递归的Hanoi算法塔(Java)   java当我运行这两个类时,我的老鼠不会移动   使用图像进行java相似图像搜索   Java8并行流机制   使用单例对象作为枚举元素的java Scala枚举,是否有可能对它们进行迭代?   java Webview更改高度大小   不可序列化对象和函数的java Spark Scala编程   java my app在eclipse中运行良好,而不是在jar中