java - 为什么当服务器程序运行时 Eclipse 抛出异常而不在 cmd.exe 中

标签 java networking

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

Exception in thread "main" java.net.BindException: Address already in use: 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();
    }

}

最佳答案

“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 位数的号码:-)

Time_wait

检查关于 Java network server and TIME_WAIT 的问题:

should-be-accepted answer给出了以下选项来缩小窗口,

setSoLinger(true,0)

setReuseAddress(true)

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

关于java - 为什么当服务器程序运行时 Eclipse 抛出异常而不在 cmd.exe 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16432280/

相关文章:

java - 管理 Java 客户端-服务器应用程序中的响应消息

java - 在 Spring Security 中同时拥有 Servlet Filter 和 AuthenticationProvider 有什么意义?

java - 使用字符串实现时,合并排序会生成任意顺序

java - 在java中扩充工厂模式

sockets - 有人可以澄清 RTCdatachannel 将如何工作吗?他们的要求是什么?

macos - 重定向音频输出

networking - 如果计算机名称以破折号 "-"开头,如何 ping 计算机

Java 将文本环绕图像

PHP 检查 IPAddress 是否是本地的

python - 为什么将 Python 系统类与自定义类合并不如 Hook 导入机制可取?