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

标签 python sockets

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

相关文章:

c# - 多个应用程序如何监听同一个端口(80)?

sockets - MonoTouch 4.01中的Socket.BeginConnect问题(在3.2.6中是可以的)

sockets - 如何通过 Go 中的套接字检索文件数据?

python - Python 与 ML 中的词法作用域

python - 检查 boolean 列表中的条件是否成立

python - 如何在python中只删除文件的内容

python - 我的井字棋 Python 游戏不会在玩家获胜时结束

java - 如何检查通过 UDP 连接交换的数据类型

java - Android - 源端口 800 的 DatagramSocket 不发送

python - 如何在 Python 中绘制连续的正弦波?