Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.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
Python socketserver在多个端口上侦听_Python_Tcp_Socketserver - Fatal编程技术网

Python socketserver在多个端口上侦听

Python socketserver在多个端口上侦听,python,tcp,socketserver,Python,Tcp,Socketserver,我正在尝试用Python 3.6.7编写一个TCP服务器,它在同一IP地址的两个端口上侦听。这就是我到目前为止的想法: 导入socketserver 类TCPServer(socketserver.StreamRequestHandler): def句柄(自身): self.data=self.rfile.readline().strip() 打印(str(自我数据)) 如果名称=“\uuuuu main\uuuuuuuu”: HOST=“localhost” 数据端口=64000 控制端口=6

我正在尝试用Python 3.6.7编写一个TCP服务器,它在同一IP地址的两个端口上侦听。这就是我到目前为止的想法:

导入socketserver
类TCPServer(socketserver.StreamRequestHandler):
def句柄(自身):
self.data=self.rfile.readline().strip()
打印(str(自我数据))
如果名称=“\uuuuu main\uuuuuuuu”:
HOST=“localhost”
数据端口=64000
控制端口=64001
data_server=socketserver.TCPServer((主机,数据_端口),TCPServer)
control_server=socketserver.TCPServer((主机,control_端口),TCPServer)
尝试:
尽管如此:
数据\u服务器。处理\u请求()
控制\u服务器。处理\u请求()
除键盘中断外:
数据\u服务器。服务器\u关闭()
控制服务器。服务器关闭()
然后,我尝试使用以下客户端与服务器对话:

导入套接字
从时间上导入睡眠
HOST=“localhost”
数据端口=64000
控制端口=64001
data=“测试数据”
将socket.socket(socket.AF\u INET,socket.SOCK\u STREAM)作为SOCK\u d,socket.socket(
socket.AF_INET,socket.SOCK_流
)作为sock_c:
sock_d.connect((主机、数据端口))
sock_c.connect((主机、控制端口))
对于范围(5)内的cnt:
sock_d.sendall(字节(数据+“”+str(cnt)+“\n”,“utf-8”))
打印(“发送:{}”。格式(cnt))
sock_c.sendall(字节(数据+“”+str(cnt+1)+“\n”,“utf-8”))
打印(“发送:{}”。格式(cnt+1))
睡眠(1)
在客户端,我得到以下输出:

Sent:     0
Sent:     1
Sent:     1
Sent:     2
Traceback (most recent call last):
  File "<...> client_test.py", line 15, in <module>
    sock_d.sendall(bytes(data + " " + str(cnt) + "\n", "utf-8"))
ConnectionAbortedError: [WinError 10053] An established connection was aborted by the software in your host machine

有人能帮我指出我这里缺少什么吗?

我认为
handle\u request
获取新连接的客户端,运行
handle()
,从套接字读取单行数据(并结束其工作),然后断开客户端连接,等待与另一个客户端的连接。因此,您必须使用
handler()
中的循环来读取来自客户端的更多行。但从我看不到它将断开连接的位置…在源代码中,您可以看到:当请求准备就绪时(
select.select()
),它将执行
\u handle\u request\u noblock()
哪个
get\u request()
之后它会运行
shutdown\u request()
很抱歉,我仍然没有看到它:
shutdown\u request==close\u request==pass
。。。所以它什么也不做。您检查了
BaseServer
的代码-请参阅
TCPServer
-有
请求。close()
而不是
pass
-
b'test data 0'
b'test data 1'