我希望使用同一台服务器监听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()
出现错误信息“权限被拒绝
”,可能是因为某些端口(1000-1100)被保留并未分配,或者由于其他原因。
我尝试使用(8000-8100)时,它显示“参数无效
”。
编辑过的内容
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()
if s is server_socket
,以检查它是否是你的服务器套接字之一 - 这意味着你可能需要两个列表,一个包含你的服务器套接字,另一个包含你传递给select()的所有套接字。 - nos