2012-02-25 74 views
0

我创建了一个聊天程序。我的服务器有一个按钮,该按钮用于在服务器套接字上启动服务器调用accept()方法,用于在服务器套接字上关闭服务器调用close()的按钮。Accept(),close()方法在ServerSocket上

当我重新按下开始按钮重新接受同一个套接字上的连接时,accept方法抛出SocketException Socket关闭。

+0

我们如何帮助您?我不知道。请阅读常见问题。并请同时接受您的其他问题的答案 – Nettogrof 2012-02-25 22:21:51

+0

http://docs.oracle.com/javase/1.4.2/docs/api/java/net/Socket.html#close()。您需要创建ServerSocket的新实例,然后调用Accept方法。 – JProgrammer 2012-02-25 22:37:45

回答

2

您无法重新打开套接字。如果您想再次使用该变量,则必须创建并分配一个新套接字。

从上Socket Java文档,请参阅“关闭” - 方法信息:

一旦插座已经关闭,但不适用于进一步的网络使用(即无法重新连接或反弹)。需要创建一个新的套接字。

关闭此套接字也将关闭套接字的InputStream和OutputStream。

0

如果您之前的套接字已成功关闭,则应该不会出现重新实例化该套接字的问题。这将在Java中工作,因为JVM将为您释放垃圾。

如果你想多次连接到服务器(这可能是有用的,因为你正在聊天),请记住这一点。 服务器端的accept函数将在每次请求时创建一个新的套接字。所以你可以使用线程并将新套接字(使用accept创建的套接字)传递给线程。

如果这不回答你的问题我会鼓励你去Oracle网站上:http://docs.oracle.com/javase/tutorial/

,并重新制订的问题。

+0

那么关闭通过从服务器上的关闭按钮的accpet方法创建的所有套接字呢?当我让多个客户端连接到服务器上并从关闭按钮调用socket.close时,它只关闭一个客户端而不是all.it似乎关闭一个套接字实例。 – 2012-03-06 11:23:39

+0

“如果在服务器启动或运行时检测到任何类型的错误,它将立即关闭所有套接字并自行终止。如果客户端或服务器关闭了与另一端的连接,代理服务器也将关闭所有套接字并终止它,它知道客户端或服务器是否因为发送了-1而断开连接,代理服务器侦听,等待它发送,遇到它时,所有套接字都关闭。 这可能有所帮助: http://www.dwgold.com/Projects/Networking/Proxyserver/Default.aspx – 2012-03-06 12:23:39

+0

当我从服务器抛出套接字异常关闭所有套接字时,没有-1发送给客户端。 – 2012-03-06 13:37:36

相关问题