多线程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")
- 项目
标签: