我编写了一个简单的服务器端编程代码,它正在等待客户端的响应,它在 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/