python – 将_socketobjects作为参数传递
发布时间:2020-12-20 13:26:21 所属栏目:Python 来源:网络整理
导读:我正在编写一个多线程分布式网络算法. 我有一个线程可以监听新的连接.每次建立新连接时,都会启动一个单独的线程来侦听来自该连接的消息. 我的问题是我打开的套接字在连接监听器内的两个方向都完美地工作.将该连接的套接字对象传递给消息侦听器后,我可以从套
我正在编写一个多线程分布式网络算法.
我有一个线程可以监听新的连接.每次建立新连接时,都会启动一个单独的线程来侦听来自该连接的消息. 我的问题是我打开的套接字在连接监听器内的两个方向都完美地工作.将该连接的套接字对象传递给消息侦听器后,我可以从套接字读取数据,但通过它发送数据不会到达远程主机. 这是我的代码中必不可少的片段: def connection_listener(port,start_e,terminate_e): s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) s.settimeout(1) s.bind(('',port)) s.listen(1) while (not start_e.isSet()): try: conn,addr = s.accept() msg_in = conn.recv(1024).split(":") if (msg_in[1]=="hello"): # If addr sends us a 'id:hello',we reply with a 'my_id:welcome' conn.send(str(my_id)+":welcome") t = Thread(target=message_listener,args=(conn,addr[0],terminate_e,)) t.start() except: pass # timeout def message_listener(conn,address,terminate_e): while (not terminate_e.isSet()): try: msg_in = conn.recv(1024) # Here I can receive everything that I send from the other end of conn,# but conn.send("any data") doesn't reach the remote host 我想做的是使用conn从消息监听器线程发送类似确认的消息.这可能是某种方式,还是我在思考并做错了? 解决方法
我自己整理了这个,所以我会分享我的答案.
我通过用零填充直到所需的长度来使协议交换固定大小的消息.我使用了32个字节的长度,从硬件的角度来看,它可能非常小.然而它似乎按照假设工作. 务实地我的解决方案看起来像: def send_everyone(message): for i in range(len(peers)): chunk = (str(my_id)+":"+message).rjust(32,'0') peers[i].send(chunk) 在接收端,我们一次只需要32个字节: def message_listener(conn,terminate_e): while (not terminate_e.isSet()): try: msg_in = conn.recv(32) ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- python自定义logger handler
- django – 南0.8.3升级导致DeserializationError
- python – 在pandas中合并在R中合并
- PYTHON.BokeProject_day01
- 第一阶段:Python开发基础 day23 面向对对象的程序设计(一)
- 用virtualenv建立多个Python独立虚拟开发环境
- Python 安装setuptools和pip工具操作方法(必看)
- 使用Nginx+uWsgi实现Python的Django框架站点动静分离
- 如何在Django中覆盖延迟删除的get()/ all()/ filter()函数?
- python – pyodbc在我的机器上非常慢,但在其他机器上却没有