首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有可能让3台服务器都在一个端口(比如端口48000)上使用Python套接字相互通信

有没有可能让3台服务器都在一个端口(比如端口48000)上使用Python套接字相互通信
EN

Stack Overflow用户
提问于 2021-04-22 21:30:24
回答 1查看 56关注 0票数 1

类似于服务器可以使用单个端口连接多个客户端,我希望此服务器也能够使用此相同端口连接到多个其他服务器,而不必在不同端口上有单独的TCP客户端套接字。

例如:服务器1、2和3都使用单个端口(例如48000)相互通信,而不是每个服务器都托管48000上的TCP套接字,并且还必须在两个额外的端口上创建另外两个TCP客户端套接字,以便与其他两个服务器通信。

这样做的原因是,分布式应用程序在理论上可以扩展到超过65k的服务器,可能所有服务器都相互连接,这将导致每个服务器耗尽可用于创建客户端套接字的端口。

更具体地说,使用Python和套接字库可以做到这一点吗?

这段代码不是字面上的,只是代表了我的程序试图实现的目标。

代码语言:javascript
复制
    self.tcp_socket.bind(("", 48000))
    # Server thread
    self.tcp_socket.listen()
    client, address = self.tcp_socket.accept()

    # Connecting to other server as client
    self.tcp_socket.connect((192.168.1.10, 48000))

当尝试使用已经用作服务器的套接字连接到服务器(侦听、接受)时,我收到错误消息"WinError 10022 An invalid argument is supplied“。

它似乎绑定到单个端口,我的程序只能充当客户端(连接到单个服务器),或者作为服务器(使用多线程连接多个客户端),但不能两者兼而有之。

简而言之,我希望许多服务器通过TCP相互连接,所有通信都使用单个端口。

EN

回答 1

Stack Overflow用户

发布于 2021-04-22 22:02:21

编辑: windows不支持同一台计算机上的多个服务器(请参阅评论)

在本例中,您只需定义另一个套接字变量,例如:"connection",而不是使用定义为server-socket的同一变量。但你还必须定义两个函数,然后在上面运行线程,否则它不会工作。例如:

代码语言:javascript
复制
from threading import Thread
def bind():
    tcp_socket.bind(("", 4444))
    # Server thread
    tcp_socket.listen()
    client, address = tcp_socket.accept()

def connect():
   connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   connection.connect((192.168.1.10, 4444))

t1 = Thread(target=bind)
t2 = Thread(target=connect)
t1.start()
t2.start()

PS:我建议使用较低的端口号,因为这是有限制的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67214281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档