2011-04-10 35 views
2

我有以下结构:的ServerSocket失败upons建设

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) 
+1

e是什么例外?你能否把它打印出来并寄到这里? – 2011-04-10 19:30:21

+0

是与管理员用户登录到Windows的用户吗? – MeBigFatGuy 2011-04-10 19:32:51

+0

我以系统中唯一的用户身份登录,该用户是管理员。 – 2011-04-10 19:36:41

回答

1

根据API,一个BindException

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

基本上,该端口可能会被另一个进程使用,甚至可能是由于不干净关闭而导致同一应用程序的另一个实例。这link可能会帮助您排除故障。

注:

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

1

你会得到你的异常的更详细的原因,如果您在新抛出的异常捕获异常:

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

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