gpt4 book ai didi

python - 如何让服务器监听多个端口

转载 作者:行者123 更新时间:2023-11-28 21:19:08 25 4
gpt4 key购买 nike

我想在同一个服务器上监听 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()

最佳答案

有两个问题。

  1. 端口 below 1024被保留。 (您需要特殊权限,例如 root 权限才能绑定(bind)到这样的端口)。

  2. 一个套接字只能监听一个端口。因此要监听多个端口,您需要为每个端口创建一个套接字。

关于python - 如何让服务器监听多个端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25135790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com