【问题标题】:Running Client Server program in java在java中运行客户端服务器程序
【发布时间】:2013-11-11 12:53:35
【问题描述】:

我用java编写了一个简单的客户端服务器应用程序。当我尝试在服务器上运行客户端时,出现以下异常。 线程“主”java.net.BindException 中的异常:地址已在使用中:JVM_Bind 在 java.net.DualStackPlainSocketImpl.bind0(本机方法) 在 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();
    }
}

}

【问题讨论】:

    标签: networking client-server


    【解决方案1】:

    您不能在不知道它正在使用或空闲的情况下使用任何随机端口。

    使用 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

    【讨论】:

    • 即使在我终止进程后,问题仍然存在。
    • 你要杀死哪个进程? serversocket 415 是免费的还是被其他进程使用?为了安全起见,我建议先寻找一个空闲端口,然后在您的服务器中使用它。
    【解决方案2】:

    根据 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

    【讨论】:

    • 那么我该如何移除这个异常
    【解决方案3】:

    我已经多次遇到这个问题。大概在您的服务器中的套接字仍然具有您指定的正在使用的端口或 bound 由另一个进程(在我的情况下,我总是有一个未正确终止的服务器执行的先前版本 - 我会执行 Ctrl-CCtrl-Z 不能正确终止进程)。

    尝试运行命令kill %1 或其他命令以完全摆脱先前运行的进程。这通常对我有用! :) 祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-15
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多