私はソケットプログラミングの新人で、簡単なcmdラインチャットアプリケーションを作成しようとしています。 以下のコードを使用して接続を受け入れ、新しいスレッドを作成しますが、新しいスレッドは作成されません。サポートされているクライアントは1つもありません(スレッドが使用されない場合は通常です)。別々のスレッドが作成されないのはなぜですか?
public class chatserver extends Thread{
public static Socket client;
public static void main(String a[]) throws Exception{
ServerSocket srv = new ServerSocket(4444);
if((client = srv.accept())!=null){
new newthread(client);
}
}
}
class newthread extends Thread{
private Socket client;
public newthread(Socket client){
super("chatchild");
this.client = client;
start();
}
スレッドが作成されない理由「oracle.com」に例を挙げましたが、その中の1つに同じコードが含まれていますが、何が起きるか正確な順序を把握できません。The snippet接続を受け入れ、スレッドを作成exapleコードから::
while (listening)
new KKMultiServerThread(serverSocket.accept()).start();
は今ここにリスニングはブールvarがtrueに座って、それをfに設定されることはありませんですコード内のどこにでも置くことができます。どのように機能しますか?
あなたが次の例を正確に示していますか?あなたのクラスは単純な 'Thread'よりも' Thread'から派生しているので、自分の作業を完了させるのは非常に奇妙です。 – sarnold
もう1つ..コンストラクタ内でスレッドを開始しないでください。完全に構築されていないオブジェクトをこのスレッドで見ることができるため、安全ではありません。 –
@sarnold私は[リンク](http://download.oracle.com/javase/tutorial/networking/sockets/)の例を次のようにしています。\ – buch11