我在java中编写了一个简单的客户端服务器应用程序。当我尝试在服务器上运行客户端时,我得到以下异常。 线程“main”中的异常java.net.BindException:已在使用的地址:JVM_Bind at java.net.DualStackPlainSocketImpl.bind0(Native Method) 在java.net.DualStackPlainSocketImpl.socketBind(未知来源) 在java.net.AbstractPlainSocketImpl.bind(未知来源) 在java.net.PlainSocketImpl.bind(未知来源) 在java.net.ServerSocket.bind(未知来源) 在java.net.ServerSocket。(未知来源) 在java.net.ServerSocket。(未知来源) 在DateServer.main(DateServer.java:8)
我已经添加了所有jar文件,检查了如何删除此异常以执行我的代码。
import java.util.Scanner;
import java.net.Socket;
class DateClient {
public static void main(String[] args) throws java.io.IOException {
String host = "localhost";
int port = Integer.parseInt("415");
Socket server = new Socket(host, port);
Scanner scan = new Scanner(server.getInputStream());
System.out.println(scan.nextLine());
}
}
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
class DateServer {
public static void main(String[] args) throws java.io.IOException {
ServerSocket s = new ServerSocket(415);
while (true) {
Socket incoming = s.accept();
System.out.println(incoming);
PrintWriter toClient = new PrintWriter(incoming.getOutputStream());
toClient.println(new Date());
toClient.flush();
incoming.close();
}
}
}
答案 0 :(得分:0)
根据API,BindException
Signals that an error occurred while attempting to bind a socket to a local address and
port. Typically, the port is in use, or the requested local address could not be assigned
基本上,该端口可能正由另一个进程使用,甚至可能是由于不正常关闭而导致同一应用程序的另一个实例。此链接可以帮助您排除故障。
注意:
运行netstat -an命令的已发布结果似乎验证多个进程正在使用端口8085,这将导致您遇到的BindException
答案 1 :(得分:0)
我已经解决了这个问题很多次了。据推测,服务器中的套接字仍然具有您使用中指定的端口或另一个进程的bound
(在我的情况下,我总是拥有服务器执行的先前版本,而不是't}正确杀死 - 我执行 Ctrl-C 或 Ctrl-Z 并没有正确杀死进程。
尝试运行命令kill %1
或其他命令以完全摆脱之前的流程运行。这通常适合我!祝你好运!
答案 2 :(得分:0)
您不能只使用任何随机端口而不知道它正在使用或免费。
使用netstat -an检查正在使用的端口并使用其中一个免费的端口。 (对于Windows,在cmd中使用netstat -an)
编辑:看看下面的链接,其中一个必须帮助你 How do I resolve the "java.net.BindException: Address already in use: JVM_Bind" error?