当前位置: 首页 > 知识库问答 >
问题:

在Java中使用相同的地址和端口接受和连接

卢杰
2023-03-14

(这个问题可能被问了一千遍,但我没有弄清楚。)

假设我有以下代码段:

InetAddress localAddress = InetAddress.getByName("192.168.1.10");
int localPort = 65000;
InetAddress targetAddress = InetAddress.getByName("192.168.1.20");
int targetPort = 65000;

// Create a new serversocket 
ServerSocket ss = new ServerSocket(localPort, 50, localAddress);
// Wait for an incoming connection...
Socket acceptedSocket = ss.accept();
// Do something with the accepted socket. Possibly in a new thread.

Set up new connection...
Socket socket = new Socket(targetAddress, targetPort, localAddress, localPort);
// Write something to the socket.

现在,我可以使用相同的地址和端口来接受传入连接和连接到地址吗?如果可以的话,怎么办?如果没有,为什么不呢?根据这篇文章,端口可以共享,所以这应该不是问题。

它是如何工作的?

共有2个答案

宦琪
2023-03-14

换句话说,您可以编写包含连接到自身的客户端的服务器程序吗?答案是肯定的。所有集成测试都是通过运行进程内服务器并连接到它来完成的。

桓嘉谊
2023-03-14

您只能通过让连接套接字使用相同的地址和端口来建立连接。(忽略多主机服务器的使用)

单个连接是源地址端口和目标地址端口的唯一组合,因此如果您有不同的源,您可以拥有相同的目标。

 类似资料:
  • 我已经在端口8180上使用以下命令启动了dockerze密钥斗篷: 作为管理员,我创建了两个领域(在同一个keyclock实例中): 租户1 银 在Tenant1中,我定义了一个连接到Angular应用程序(它可以工作)和GITHUB身份提供者(它也可以工作)的客户端(public) 在Silver Realm中,我将客户端“silverBroker”定义为机密...连接到 Angular 应用程

  • 配置Apache监听指定的地址和端口。 概述 相关模块 相关指令 core mpm_common <VirtualHost> Listen Apache启动时,会绑定本机上的地址和端口,然后等待请求的进入。默认情况下,它会监听本机的所有地址。但是,当需要监听特定的地址或端口或地址与端口的组合,或者需要对不同的IP地址、主机名、端口作出不同的响应(如使用虚拟主机)时,就必须明确指定。 Listen指

  • 另外,两个应用程序不能在一台机器上使用相同的端口,那么当两个不同的服务器具有相同的端口,而一台机器需要通过两个不同的应用程序连接到这两个服务器时会发生什么呢?

  • 我使用python中的套接字设置了一个客户机和一个服务器,客户机向服务器发送数据,服务器执行操作,然后向客户机返回一些数据。最初,客户端和服务器将具有相同的端口号(9999)。我目前的问题是,我必须将服务器端口更改为19999,当我试图运行时,它无法工作。客户端能够发送数据,如果它的端口也更改为19999,但它不工作,如果客户端是9999和服务器是19999,这是我需要的。新的网络系统,所以将感谢

  • 问题内容: 标题说了。 如果我尝试将ServerSocket和SSLServerSocket绑定到同一端口,则会收到错误消息。如果客户端尝试连接到没有SSL的SSLServerSocket,则accept()方法将引发错误。如果客户端尝试通过SSL连接到ServerSocket,我不知道如何建立安全连接。 可能吗? 问题答案: 您可以接受普通的套接字连接,并在以后使用(在服务器端)将其升级到SSL