客户端发起tcp连接con1:Aip: Aport—>Bip:Bport,没有问题,不关闭连接,
再发起tcp连接con2:Aip:Aport—>Cip:Bport,就会address already in use,根据四元组,两个连接并不是同一个连接,为什么端口不可以共用呢?是客户端发起连接,并且指定某个端口的情况下
客户端发起tcp连接con1:Aip: Aport—>Bip:Bport,没有问题,不关闭连接,
再发起tcp连接con2:Aip:Aport—>Cip:Bport,就会address already in use,根据四元组,两个连接并不是同一个连接,为什么端口不可以共用呢?是客户端发起连接,并且指定某个端口的情况下
也不是不可以, 如果是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
查看端口状态
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
5 回答3.6k 阅读
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答799 阅读✓ 已解决
通俗一点举个例子:电话亭里只有一个电话,如果这个电话别人正在使用,那你还能用吗?
放在 ip 通信上面也是同理。所以一般客户端向服务端发请求是不会指定端口的,而是让系统自动分配一个(当你不指定端口时,系统就会自动分配)。