Python socketserver在多个端口上侦听
我正在尝试用Python 3.6.7编写一个TCP服务器,它在同一IP地址的两个端口上侦听。这就是我到目前为止的想法: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
导入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'