2012-02-25 5 views
0

私はチャットプログラムを作成します。私のサーバにはボタンがあり、ボタンはサーバーソケットでサーバーコールaccept()メソッドを開始するためのボタンで、サーバーソケットでサーバーコールclose()を閉じるためのボタンです。accept()、close()メソッドServerSocketで

同じソケット上で接続を再受け入れるために「開始」ボタンを再度押すと、メソッドはaccept SocketExceptionソケットを閉じます。

+0

どうすればお手伝いできますか?何も思いつきません。 FAQをお読みください。あなたの他の質問にも回答を受け入れてください。 – Nettogrof

+0

http://docs.oracle.com/javase/1.4.2/docs/api/java/net/Socket.html#close()。 ServerSocketの新しいインスタンスを作成し、そのインスタンスに対してacceptメソッドを呼び出す必要があります。 – JProgrammer

答えて

2

ソケットを再度開くことはできません。変数を再度使用する場合は、新しいソケットを作成して割り当てる必要があります。 Socket上のJavaドキュメントから

、「クローズ」-method上の情報を参照してください。ソケットがクローズされたら、それはさらにネットワーキングの使用のために利用できない、

(つまり、再接続することができないか、リバウンド)。新しいソケットを作成する必要があります。

このソケットを閉じると、ソケットのInputStreamとOutputStreamも閉じます。

0

以前のソケットが正常に閉じられた場合、そのソケットの再インスタンス化に問題はないはずです。 JVMがあなたのためにゴミを解放するので、これはJavaで動作します。

サーバーに複数の接続が必要な場合(これはチャットを行っているので便利です)、この点に留意してください。 サーバー側のaccept関数は、要求されるたびに新しいソケットを作成します。したがって、スレッドを使用して、新しいソケット(acceptを使用して作成されたソケット)をスレッドに渡すことができます。

これは、あなたの質問に応答しない場合、私は、OracleのWebサイト上で行くことをお勧めします:http://docs.oracle.com/javase/tutorial/

との質問を再定式化します。

+0

どのようにすべてのソケットを閉じてserver.when上の閉じるボタンからaccpetメソッドによって作成された私は複数のクライアントをサーバーに接続し、閉じるボタンからsocket.closeを呼び出すと、 –

+0

"サーバーが起動または実行中にエラーが検出されると、すぐにすべてのソケットを閉じて終了します。クライアントまたはサーバーのいずれかが接続を閉じると、Proxy Serverはすべての接続を閉じます-1が送信されたためにクライアントまたはサーバーのいずれかが切断されたかどうかを知っています。Proxy Serverはこれを待ち受けて待機し、発生するとすべてのソケットが閉じられます。 http://www.dwgold.com/Projects/Networking/Proxyserver/Default.aspx –

+0

すべてのソケットを閉じるためにサーバーからソケット例外をスローすると、-1はクライアントに送信されません。 –

関連する問題