多线程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使用Hibernate替换一组记录的正确方法是什么   java调用存储过程时返回相同的记录   java创建一个ActionListener,逐步更新JPanel   java如何为这个WSDL工作wsimport我遇到了错误,我无法让它工作   Java Mysql空指针异常   java执行超时(1600ms)如何优化此代码以更快地运行?   java在Spring的@Transactional方法期间处理异常   java如何在驱动程序类中调用泛型方法   java如何理解SpringMVC工作流?   java在TomcatJSP页面中使用JDK15的JEP378文本块   java为什么在类中找不到主方法?   在java中创建链表而不使用内置方法/importing util   java在空格和破折号上拆分字符串,但不在字符串的值上拆分字符串   不带按钮的java JOptionPane   java如何减少Netbeans中JTable的列?   通过spring的JavaRESTAPI   Java:最简单的日期减法   来自JPanel的java BuffereImage,背景透明   JavaJFrame:如何使用linebreaklike行为创建简单布局?