3

アクセス ポイントに接続する 2 つの Wi-Fi モジュール M1 と M2 があります。同じアクセス ポイントに接続する Android フォンがあります。Androidフォンにソケットサーバーがあり、2つのモジュールがクライアントとしてサーバーに参加しています。ここで私の質問は、M2 に何も送信せずに、私の電話からモジュール M1 に文字列メッセージを送信することは可能かということです。メッセージを送信するクライアントを選択したい。Javaでも可能ですか?

わかりました、ここに行きます。

//setting up server
ServerSocket serverSocket = new ServerSocket(8000, 0, IPaddress);

//creating a client socket to accept it
Socket clientSocket = serverSocket.accept();

accept()ここで、関数がブロックされているためにメインスレッドがフリーズしないように、別のスレッドでクライアントを受け入れます。

新しいクライアントが接続するたびに新しいスレッドを作成する方法がわかりません。また、接続できるクライアントの数を制限する方法もわかりません。最大で 5 つのクライアントが必要で、それ以上は必要ありません。

4

1 に答える 1

2

はい、可能です。各クライアントへの個別の接続を維持する必要があります。このServerSocketクラスには、オブジェクトaccept()を返す関数があります。Socketそのオブジェクトは、サーバーと 1 つのクライアントの 2 つのポイント間の接続を表します。ServerSocket.accept()ループ内で複数回呼び出して、すべての着信接続を受け入れることができます。Socket返される各オブジェクトは、異なるクライアント用です。

サーバーが特定のクライアントにメッセージを送信するには、どのソケットがどのクライアントに属しているかを知る必要があるため、クライアントは自分自身を識別するメッセージをサーバーに送信する必要があり、サーバーは読み取って解釈する必要があります。そのメッセージ。次に、その特定のクライアントに適切な応答で応答できます。

それでも問題が解決しない場合は、コードを投稿してください。

質問にコードを追加したため更新:スレッドの作成に関するAndroid ドキュメントを参照してください。これは、stackoverflow に関するこの投稿を超えて多くのことを読むことになります。

接続の受け入れとスレッドの開始に関しては、ループで実行してください。

for(int i = 0; i<5; i++){
    clientSocket = serverSocket.accept();
    // start a new thread, passing it the clientSocket as an argument
}

その他の役立つリンク: https://developer.android.com/resources/articles/painless-threading.html https://developer.android.com/guide/topics/fundamentals/processes-and-threads.html

于 2012-05-27T22:37:09.463 に答える