为什么Linux客户端的情况下不支持端口共用?

发布于 2022-09-11 16:33:01 字数 176 浏览 28 评论 0

客户端发起tcp连接con1:Aip: Aport—>Bip:Bport,没有问题,不关闭连接,
再发起tcp连接con2:Aip:Aport—>Cip:Bport,就会address already in use,根据四元组,两个连接并不是同一个连接,为什么端口不可以共用呢?是客户端发起连接,并且指定某个端口的情况下

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

多情癖 2022-09-18 16:33:01

也不是不可以, 如果是socket的话只要设置端口复用就可以实现,随便写一段代码演示一下

#/bin/python
import sys
import time
import socket

def start_tcp_client(ip, port):

    #server port and ip
    server_ip = ip
    servr_port = port
    tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 设置端口复用和地址复用
    tcp_client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    tcp_client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)

    tcp_client.bind(('0.0.0.0', 23333))
    tcp_client.connect((server_ip, servr_port))
    # 没啥意义地一直接收数据
    while True:
        print tcp_client.recv(1024)
        time.sleep(1)


ip = sys.argv[1]
port = int(sys.argv[2])
start_tcp_client(ip, port)

然后启动两个进程连接不同的数据库

p1

[root@chengqm test]# python same_port_socket.py 10.0.0.247 3306
M
5.7.9-log{De~uf~ÿ?CO,Gdn0{;uumysql_native_password
Xshell

p2

[root@chengqm test]# python same_port_socket.py 10.0.0.248 3306
M
5.7.9-logĕ-4WHKmÿ?TD":+ZHN~&mysql_native_password

查看端口状态

clipboard.png

辞旧 2022-09-18 16:33:01

通俗一点举个例子:电话亭里只有一个电话,如果这个电话别人正在使用,那你还能用吗?

放在 ip 通信上面也是同理。所以一般客户端向服务端发请求是不会指定端口的,而是让系统自动分配一个(当你不指定端口时,系统就会自动分配)。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文