Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止python2的TCPThreadingServer在多个请求中调用请求处理程序上的句柄_Python_Sockets_Tcp - Fatal编程技术网

防止python2的TCPThreadingServer在多个请求中调用请求处理程序上的句柄

防止python2的TCPThreadingServer在多个请求中调用请求处理程序上的句柄,python,sockets,tcp,Python,Sockets,Tcp,我正在尝试使用Python的socket和SocketServer模块编写一个网络应用程序 在网络模型中,只有客户端节点。 每个节点都连接到一些其他节点邻居,并可以与它们交换消息。 有两种类型的消息请求数据和响应数据,响应数据字符串是根据请求生成的消息数据消息基本上是两行字符串。 为了让节点生成响应数据消息,它必须向其连接的节点发送请求数据消息,并根据接收到的数据生成响应数据。 我使用TCP实现这些连接,即:当两个节点使用socket.connect和socket.accept连接时,它们将保持

我正在尝试使用Python的socket和SocketServer模块编写一个网络应用程序

在网络模型中,只有客户端节点。 每个节点都连接到一些其他节点邻居,并可以与它们交换消息。 有两种类型的消息请求数据和响应数据,响应数据字符串是根据请求生成的消息数据消息基本上是两行字符串。 为了让节点生成响应数据消息,它必须向其连接的节点发送请求数据消息,并根据接收到的数据生成响应数据。 我使用TCP实现这些连接,即:当两个节点使用socket.connect和socket.accept连接时,它们将保持连接,并从同一连接传递消息。 现在问题来了

我使用SocketServer.ThreadingCpserver和自定义请求处理程序实现了这些节点,因此当节点获得请求数据时,他会将响应数据发送给其邻居,但当他获得响应时,ThreadingCpserver可能会将其捕获为新请求,我假设select.select就是这样工作的,当有数据要读取时,我可能无法从发送请求消息的位置获取响应消息,因为ThreadingCPServer已经实例化了一个新的请求处理程序

基本上我是在我的请求处理程序中这样做的,我担心它可能不起作用:

# conn : a connected socket object created from socket.accept
conn.sendAll(requestMessage)
# I think this will not work because it might be considered a new request by the ThreadingTCPServer
response = conn.recv(1024)
我还没有真正尝试过这个,也不知道它是否会起作用,但是即使它在一些有限的测试中起作用,我也不能确定它是否会一直起作用,因为问题是否真的存在源于比赛条件


这是否有效?如果没有,我可以采取哪些其他方法而不必重新发明轮子。

这种方法确实有效,因为TCP将为节点之间的对话打开单独的端口,并且它与服务器正在侦听的端口无关