2016-06-21 6 views
0

クライアントから送信された文字列を使って通信するマルチクライアントソケットシステムを作成しようとしていますが、その内容に応じてイベントが発生します。
それを行う方法には多くの物質がありますが、その背後にある論理を把握することはできません。socket.accept()メソッドの後に新しいスレッドを作成するとどうなりますか?

socket.accept(); 
Thread t = new Thread(runnable); 

私はこれがどのように機能するかを理解することはできません:

  • ながら、(真の)継続的に渡さ
    In this exampleと、この1でenter link description here、二つの主要な指示があり、コードの中に真の作品がありますこれらの命令ではなく、accept()メソッドがクリックされたときにのみスレッドを作成します。
  • 新しいスレッドには専用のポートがありますか?ソケット通信が1対1ではありませんか?
  • ソフトウェアはどのように生成されたソケットスレッドを追跡しますか?それは実際には重要ですか?
  • 私に書いたスレッドに返信を送信するにはどうすればよいですか?

私はGoogleのスキルが不足しているかもしれませんが、このようなことをするための良いチュートリアルは見つかりませんでした。

+0

、あなたのPrintStreamは、その後、ガベージコレクトされないことを確認する必要があり

ServerSocket ss = ...; Socket s = ss.accept(); PrintStream ps = new PrintStream(s.getOutputStream()); ps.println("Hello World"); 

のような単純な

をです完全なコードのように見えます。 'accept()'は戻り値を持ち、スレッド 't'は起動しません。これが実際に実行されるコードの正しいコピーだと確信していますか? – Arkadiy

答えて

1

while(true)はこれらの命令を継続的に渡しますが、accept()メソッドがクリックしたときにのみスレッドを作成します。

誰かが接続しようとするまで、accept()メソッドの実行が停止します。これは、IDEのデバッグモードを使用して確認できます。

新しいスレッドには専用のポートがありますか?ソケット通信が1対1ではありませんか?

はありません、あなたは

がどのようにソフトウェアが生み出されたソケットのスレッドを追跡しないのと同じポートに多くの接続を持っている、そしてそれは実際には関係ありませんか?

は、私はちょうど私が書いたスレッドに返信するにはどうすればよい今

これについて気ですか?

誰かがあなたが継続的にこれらの命令上を通過しながら、(真)•マニュアル

+0

あなたが言ったように、accept()がSocketを返すことがわかりました。私はクライアント側でこれを破壊するとどうなりますか?そして、私のプログラムは "inputStream.readLine()"のようなすべての命令で停止しますか?あなたの答えをありがとう、それは少し物事を明確にした! – Vale

1

を確認し、このユーザーを対応するオブジェクトを受け取る接続しようが、受け入れる場合にのみ、(スレッドを作成)メソッドのクリック?

新しいスレッドがソケットから入ってくるデータをリッスンするために作成された(参照Socket.getInputStream())

•新しいスレッドが専用ポートを持っていますか?ソケット通信が1対1ではありませんか?

スレッドにはポートがありません。しかし、Socketにはこのクライアントとの通信専用のアドレスがあります

•ソフトウェアはどのように生成されたソケットスレッドを追跡していますか?

これはソフトウェアによって異なります。しかし、ほとんどの時間、あなたはCollectionのいくつかの並べ替えに接続されているソケットの記録を続けるだろう - 。クライアントがログインしている場合は、ユーザーIDとソケットの間におそらくList、またはMap

私は返事を送るにはどうすればよい•ちょうど私を書いたスレッドに?単純な意味では、これはストリーム/ソケットを閉じますとあなたはこれがない

+0

コレクションに入れておくと言うと、ソケットに関連付けられたスレッドを追跡する必要がありますか? ServerThreadはユーザーが作成したクラスです: 'ServerThread st = new ServerThread(s);'すべてのスレッドは同じ名前ですが、ソケットは異なります。または、接続が閉じられたら、どのスレッドを終了させるかをどのように知ることができますか?あなたのtmeありがとう – Vale

関連する問題