【问题标题】:ServerSocket fails upons constructionServerSocket 构造失败
【发布时间】:2011-04-10 19:28:12
【问题描述】:

我有以下结构:

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

构造失败,我收到“无法创建服务器套接字”错误。端口始终为 8085。我在(Windows 7)防火墙中打开了出站和入站端口。可能是什么问题?

异常是IOException:

线程“主”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)

【问题讨论】:

  • e 有什么例外?你能把它打印出来贴在这里吗?
  • 你是用管理员用户登录windows的用户吗?
  • 我以系统中唯一的用户身份登录,即管理员。
  • 8085 当前是否被任何其他进程使用? netstat -an 在这里会有所帮助。对于 e.printStackTrace() 的结果 +1 会有所帮助。
  • 捕获异常以引发异常对我来说听起来像是不好的做法。

标签: java sockets port


【解决方案1】:

根据 API,BindException

表示发生错误的信号 尝试将套接字绑定到本地 地址和端口。通常,端口 正在使用中,或请求的本地 无法分配地址。

基本上,该端口可能正在被另一个进程使用,甚至可能由于非正常关闭而被同一应用程序的另一个实例使用。这个link 可以帮助您排除故障。

注意:

运行netstat -an 命令的发布结果似乎验证端口8085 正在被多个进程使用,这将导致您遇到BindException

【讨论】:

    【解决方案2】:

    如果您将捕获的异常包含在新抛出的异常中,您将获得更详细的异常原因:

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

    不过,我最初的猜测是,如果您已经处理过防火墙问题,那么该端口已经在使用中。

    【讨论】:

      猜你喜欢
      • 2017-07-07
      • 1970-01-01
      • 1970-01-01
      • 2015-06-28
      • 2020-07-29
      • 2014-10-11
      • 2021-10-01
      • 1970-01-01
      相关资源
      最近更新 更多