Java 如何跳过当前正在使用的端口?

Java 如何跳过当前正在使用的端口?,java,sockets,nio,apache-mina,Java,Sockets,Nio,Apache Mina,我目前正在8090端口上运行jboss,我的客户端套接字正在jboss中运行。我以预定的间隔向服务器套接字发送请求以获取数据。现在我的问题是 由于8090端口已在使用,是否可以在该端口上打开客户端套接字并连接服务器 是否可以在一个端口上运行两个应用程序 如果端口已在使用中,如何跳过该端口。我的客户端套接字一次打开5000个请求,因此它同时打开多个本地端口。因此,如果有任何端口已经在使用中,我需要跳过它 对于TCP/IP,不能。一次只能有一个应用程序在单个端口上侦听。现在,如果您有两个网卡,您可以

我目前正在8090端口上运行jboss,我的客户端套接字正在jboss中运行。我以预定的间隔向服务器套接字发送请求以获取数据。现在我的问题是

  • 由于8090端口已在使用,是否可以在该端口上打开客户端套接字并连接服务器

  • 是否可以在一个端口上运行两个应用程序

  • 如果端口已在使用中,如何跳过该端口。我的客户端套接字一次打开5000个请求,因此它同时打开多个本地端口。因此,如果有任何端口已经在使用中,我需要跳过它


  • 对于TCP/IP,不能。一次只能有一个应用程序在单个端口上侦听。现在,如果您有两个网卡,您可以让一个应用程序使用相同的端口号在第一个IP上侦听,第二个应用程序在第二个IP上侦听

    要跳过它,您需要进行一次简单的检查以查看它是否正在使用:

    boolean portTaken = false;
    ServerSocket socket = null;
    try {
        socket = new ServerSocket(portNumber);
        } 
    catch (IOException e) {
        portTaken = true;
    } 
    

    然后针对每个端口检查布尔值,查看它是否正在使用,直到找到一个可用的端口。

    您不必担心客户端套接字的本地端口。操作系统会为您找到一个,除非您使用太多,如果您一次有5000个,这是一个明显的可能性。打开套接字时不要指定任何本地端口信息。

    当我将上面的代码保存在客户机套接字中运行时,它可以在运行jboss的8090端口上操作套接字。根据您所说的,客户端不应该打开该端口上的套接字,但它可以打开。我还尝试在eclipse中运行该程序,保持一定范围的端口,然后显示8090端口可用。这是怎么发生的请解释我在解决这个问题。感谢巴斯光年的帮助。