服务器套接字构造失败

3

我有以下的构造:

try {
    serverSocket = new ServerSocket(port);
} catch (Exception e) {
    throw new RuntimeException("Could not create server socket.");
}

当我尝试构建时,出现了“无法创建服务器套接字”错误。端口始终为8085。我在(Windows 7)防火墙中打开了出站和入站端口。问题可能是什么?
异常为IOException:
“main”线程中的异常 java.lang.RuntimeException: 无法创建服务器套接字。 在cs236369.proxy.ProxyServer.(ProxyServer.java:23) 在cs236369.proxy.ProxyServer.main(ProxyServer.java:62)
运行“netstat -an”命令会返回以下结果:
TCP    0.0.0.0:8085           0.0.0.0:0              LISTENING
TCP    [::]:8085              [::]:0                 LISTENING

堆栈跟踪:

java.net.BindException: Address already in use: JVM_Bind
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(Unknown Source)
at java.net.ServerSocket.bind(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at cs236369.proxy.ProxyServer.<init>(ProxyServer.java:21)
at cs236369.proxy.ProxyServer.main(ProxyServer.java:63)

1
e是什么异常?你能否将其打印并在此处发布? - Vladimir Ivanov
您登录Windows的用户是否为管理员用户? - MeBigFatGuy
1
8085 目前是否被其他进程使用?netstat -an 可以帮助解决这个问题。并且 e.printStackTrace() 的结果也会有所帮助。 - Charlie
2
在我的看法中,捕获异常再抛出异常听起来不是一个好的做法。 - Neil
@MeBigFatGuy @Vladimir @ach_l @noob :: 堆栈跟踪已添加。 - Amir Rachum
显示剩余3条评论
2个回答

2
根据API,BindException是指尝试将套接字绑定到本地地址和端口时发生错误。通常情况下,端口已被占用,或者无法分配请求的本地地址。
基本上,该端口可能被另一个进程使用,甚至可能是由于不干净的关闭而导致同一应用程序的另一个实例。此链接可能会帮助您进行故障排除。
注意:
运行netstat -an命令的发布结果似乎验证了端口8085被多个进程使用,这将导致您遇到的BindException

1
如果在新抛出的异常中包含已捕获的异常,您将获得有关异常更详细的原因。
try {
    serverSocket = new ServerSocket(port);
} catch (Exception e) {
    throw new RuntimeException("Could not create server socket.", e);
}

我的最初猜测是,如果您已经处理过防火墙问题,那么端口可能已经被使用了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接