2

我写了一个简单的服务器端编程代码,它正在等待来自客户端的响应,这在 Eclipse 上运行成功cmd.exe但是在 Eclipse 上执行它时抛出异常,异常的详细信息如下;

线程“主”java.net.BindException 中的异常:地址已在使用中:JVM_Bind

这是在 Eclipse 中发生的,任何人都可以告诉我它在 Eclipse 中是如何工作的以及如何在cmd.exe

服务器端程序的代码是:

package networking;

import java.io.*;
import java.net.*;

public class Server1 {
    public static void main(String args[]) throws Exception {
        ServerSocket sock = new ServerSocket(5000);
        Socket s1 = sock.accept();
        BufferedReader br = new BufferedReader(new InputStreamReader(
                s1.getInputStream()));
        String msg = br.readLine();
    }

}
4

2 回答 2

1

启动“Server1”时,套接字打开。

在以下情况下可能会发生这种情况:

  • Server1已经开始。(你没有杀死它,似乎是可能的情况......)
  • 另一个进程正在侦听端口 5000。
  • 该端口还没有完全关闭,而是处于“等待”状态一段时间。(如果在连接套接字时服务器被杀死,就会发生这种情况。)

但!而不是猜测,您应该简单地检查发生了什么:下载 Microsoft 的 TCPView 并查看:

http://technet.microsoft.com/en-us/sysinternals/bb897437

(您也可以在 cmd 窗口中使用 netstat -a。)

一些注意事项:

端口号

您可能不应该使用端口 5000,因为它似乎被 uPnP 使用 - 您可能会发现该端口在某些机器上始终是打开的......检查这里:

http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

尝试一个 5 位数字 :-)

时间的等待

检查这个关于Java 网络服务器和 TIME_WAIT的问题:

应该接受的答案提供了以下选项来减少窗口,

setSoLinger(true,0)

setReuseAddress(true)

(在终止服务器时存在丢失数据的风险,因为客户端可能不会意识到发送失败。在过去,数据也可能会混淆,但现在情况已不再如此。)

于 2013-05-08T06:13:27.043 回答
0

这曾经在日食中一直发生在我身上。确保没有其他与您的服务器相关的东西正在运行。在 Eclipse 中,确保单击红色框以终止所有实例。要仔细检查,如果在 Windows 中,请转到任务管理器并确保没有与您的服务器相关的进程正在运行。这应该够了吧。

于 2013-05-08T05:19:26.480 回答