我想在同一个服务器上监听 100 个不同的 TCP 端口。这是我目前正在做的事情:-
import socket
import select
def main():
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
for i in range(1000,1100):
server_socket.bind(('127.0.0.1', i))
server_socket.listen(1)
read_list = [server_socket]
while True:
readable, writable, exceptional = select.select(read_list, [], read_list)
for s in readable:
if s is server_socket:
#print "client connected"
client_socket, address = server_socket.accept()
read_list.append(client_socket)
else:
# One of the tcp clients
data = s.recv(1024)
if not result:
s.close()
read_list.remove(s)
#print "client disconnected"
if __name__ == "__main__":
main()
它返回一个错误,提示 Permission Denied
。是因为某些端口(1000-1100)被保留没有分配给它还是因为其他原因?
我试过 (8000-8100),它说 Invalid Arguments
已编辑
import socket
import select
def create_socket(TCP_PORT):
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind(('127.0.0.1', TCP_PORT))
server_socket.listen(1)
return server_socket
def main():
read_list = []
for TCP_PORT in range(8000,8100):
read_list.append(create_socket(TCP_PORT))
while True:
readable, writable, exceptional = select.select(read_list, [], read_list)
for s in readable:
if s is server_socket:
#print "client connected"
client_socket, address = server_socket.accept()
read_list.append(client_socket)
else:
# One of the tcp clients
data = s.recv(1024)
if not result:
s.close()
read_list.remove(s)
#print "client disconnected"
if __name__ == "__main__":
main()
最佳答案
有两个问题。
端口 below 1024被保留。 (您需要特殊权限,例如 root 权限才能绑定(bind)到这样的端口)。
一个套接字只能监听一个端口。因此要监听多个端口,您需要为每个端口创建一个套接字。
关于python - 如何让服务器监听多个端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25135790/