JAVA:java.net.BindException:地址已在使用:JVM_Bind [重复]

Posted

技术标签:

【中文标题】JAVA:java.net.BindException:地址已在使用:JVM_Bind [重复]【英文标题】:JAVA:java.net.BindException: Address already in use: JVM_Bind [duplicate] 【发布时间】:2018-01-02 04:47:56 【问题描述】:

我已经编写了这两个类,一个用于客户端,另一个用于服务器。当我同时运行它们时,我收到以下错误:

java.net.BindException: Address already in use: JVM_Bind...

有什么问题?我也使用 TCPview 软件,只有两个 java.exe 使用相同的端口。这两个java.exe 进程属于应用程序。

代码如下:

服务器代码

/**
*
* @author casinoroyal
*/
public class server 
    public static ServerSocket socket1;
    public static void main(String[] args)  
        try 
            socket1 = new ServerSocket(1254);
            String request="";
            Socket mylink=socket1.accept();
            System.out.println("server feels=====");
            DataInputStream input= new DataInputStream(mylink.getInputStream());
            DataOutputStream output=new DataOutputStream(mylink.getOutputStream());
            Scanner chat=new Scanner(System.in);

            while(!request.equals("QUIT"))
                request=input.readUTF();
                output.writeUTF(chat.next());
            

            socket1.close();
         catch (IOException ex) 
            System.out.println(ex);
        
    

客户代码

package javaapplication9;
import java.net.*;
import java.io.*;
import java.util.*;
public class client 
    //main
    public static void main(String[] args)  
        System.out.println("client want to be connected");   
        try 
            Socket mysock = new Socket(InetAddress.getLocalHost(),1254);               
            System.out.println("client has been connected");  
            DataInputStream input = new DataInputStream(mysock.getInputStream());
            DataOutputStream output = new DataOutputStream(mysock.getOutputStream());
            String reque="";
            Scanner scan1=new Scanner(System.in);
            String sendmsg=scan1.next();

            while(!reque.equals("QUIT"))
                output.writeUTF (sendmsg);
                reque=input.readUTF();
            

            mysock.close();
         catch (IOException ex) 
            System.out.println("client rejected"+ex);
        
    

【问题讨论】:

可能的原因可能是有两台服务器正在运行。如果需要,请使用 tcpview 本身并关闭两个 java.exe 实例。然后重试,先运行服务器,然后运行客户端。 【参考方案1】:

有什么问题?我也使用 TCPview 软件,只有 两个 java.exe 使用相同的端口。这两个 java.exe 进程属于应用程序。

这是你的问题。

您尝试在计算机的同一端口绑定 2 个套接字,但您无法在同一台计算机的同一端口绑定 2 个套接字。

这可能是因为您有一个正在侦听端口 1254 的现有进程(可能是您的服务器应用程序的一个实例),并且您尝试运行尝试在端口 1254 上绑定的服务器应用程序

【讨论】:

"你不能在同一台计算机的同一个端口上绑定 2 个套接字。"其实你可以,只要它们都绑定到不同的IP地址,并且没有一个是0.0.0.0。 我认为你是对的......当我只运行服务器代码(不运行客户端代码)时,我看到两个 java.exe 在同一个端口上运行......我能做些什么呢?当我用 TCPview 杀死其中一个文件时,java.exe 都被杀死了......我该怎么办? 这段代码有什么更正吗? @EJP 抱歉,我不清楚。你可以做两次new Socket(addressToConnect, aPort);。将尝试在同一个端口连接,但它们的本地端口会不同,所以这两个不会使用同一个端口。我想说的是你不能做两次new ServerSocket(1254); 会抛出一个java.net.BindException,因为你试图让 2 个套接字在同一台计算机上的同一个端口上监听。 @M.shahbazi 我运行了一个服务器实例和一个客户端实例,但没有得到任何java.net.BindException。两个客户端进程在服务器上连接没有问题。您只需要确保在计算机上已经有一个服务器在运行时,不要试图让另一台服务器运行。

以上是关于JAVA:java.net.BindException:地址已在使用:JVM_Bind [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java 布尔运算

java [Java] Java常用代码#java

Java - 35 Java 实例

Java While 循环

Java 字符串

Java If ... Else