在java中运行Client Server程序

时间:2013-11-11 04:24:51

标签: networking client-server

我在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();
    }
}

}

3 个答案:

答案 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?

Address already in use: JVM_Bind