我扩展了Socket类并遇到了一些我不理解的错误,所以我寻求你的帮助。下面是一个简短的片段 - 没什么。如果我插入了错误的主机地址,则第一次出现错误operation time out
。但是,在我尝试使用有效地址的后续时间,错误显示为socket closed
。我没有明确关闭套接字,println说socket closed is false
。知道套接字关闭的原因吗?
java.net.SocketException: Socket closed
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
at java.net.Socket.connect(Socket.java:529)
at edu.astar.i2r.ppdf.exchange.p2p.PeerClient.connect(PeerClient.java:251)
at edu.astar.i2r.ppdf.exchange.p2p.PeerClient.connectToServer(PeerClient.java:89)
at edu.astar.i2r.ppdf.demo.ui.client.peertopeer.P2PParamsPage$1.actionPerformed(P2PParamsPage.java:87)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
@Override
public void connect(SocketAddress endPoint) throws IOException{
System.out.println("socket closed is " + this.isClosed());
super.connect(endPoint);
logger.info("Connected to server...");
this.ostream = new ObjectOutputStream(this.getOutputStream());
this.istream = new ObjectInputStream(this.getInputStream());
答案 0 :(得分:0)
此异常表示您的应用程序已关闭套接字,现在正尝试继续使用它。
答案 1 :(得分:0)
有可能在整个程序中的某个地方,你已经调用了套接字本身的close()或者ObjectOutputStream或ObjectInputStream或者程序中使用的任何其他读者/编写器。 尝试在整个程序中注释掉所有.close()语句并再次运行程序。一旦发现问题,不要忘记将它们取消注释。