Java Socket(Socket)は、一般に「ソケット」として知られており、IPアドレスとポートを記述し、通信チェーンのハンドルです。アプリケーションは通常、「ソケット」を介してネットワークリクエストにリクエストを行うか、回答します。
ソケットを使用して、複数のクライアントと同じクライアント間の通信を実現します。最初に、クライアントはサーバーに接続してメッセージを送信し、サーバーはメッセージを受信した後にメッセージを処理し、次にクライアントに完了した後にメッセージに返信します。私は、すべての人から学び、一緒に進歩することを望んで、自分の考えを通してサーバーとクライアントによって実装されたコードを書きました。
サーバーコード
/** *ソケットサーバー *機能説明: */パブリッククラスサーバー{/** *エントリ * * @param args * @throws ioexception */public static void main(string [] args)throws ioexception {//すべての例外情報はint int port = 8899; Serversocket(port); system.out.println( "クライアントへの接続を待つ..."); while(true){//サーバーは他のソケットから接続要求を受信しようとします。サーバーの受け入れメソッドは、ブロッキングソケットソケット= server.accept();/***サーバーがクライアントの接続要求を同期して処理します。クライアントから接続要求を受信するたびに、 *次の接続要求を処理する前に、最初に現在のクライアントと通信する必要があります。これは、より並行性がある場合、プログラムのパフォーマンスに深刻な影響を与えます。 *この目的のために、クライアントとの通信の次の非同期処理に変更できます* ///ソケットを受信するたびに、新しいスレッドを処理するために新しいスレッドが確立されます(新しいタスク(ソケット))。 socket){this.socket = socket;} @override public void run(){try {handlersocket();} catch(expection e){e.printstacktrace();}}/** *クライアントソケット * * @throws ioexception */private void handlersockent() Socketの入力ストリームからデータを受信したときに、クライアントから送信された情報を読んでください。上記のように少し読むのは複雑すぎます。 * BufferedReaderを使用して一度に1行を読み取ることに変わることがあります * * BufferedReaderの読み取り方法は、一度に1行ずつ読み取ります。この方法はブロックされています。プログラムは、データの行を読み取るまで実行され続けません。 *では、readlineはいつ行を読みますか? ReadLineメソッドは、行が読み取られたとは考えておらず、 *ブロッキングを終了し、プログラムを実行し続けます。 *したがって、BufferedReaderのReadlineを使用してデータを読み取る場合、対応する出力ストリームにラインブレークを書き込むことを忘れないでください(*は、ストリームが終了した後に終了として自動的にマークされ、ReadLineを認識できます)。ラインブレークを書き込んだ後、出力ストリームがすぐに閉じられない場合は、フラッシュすることを忘れないでください。 */bufferedReader BR = new BufferedReader(new inputStreamReader(socket.getInputStream()、 "utf -8"); stringbuilder sb = new StringBuilder(); string temp; int index; sb.append(temp.substring(0、index)); break;} sb.append(temp);} system.out.println( "form client [ + socket.getport() +"]メッセージコンテンツ: " + sb.toString(); "utf-8"); writer.write(string.format( "hi、%d。空は明るく、空気が晴れ、風は滑らかです!"、socket.getport()); writer.flush(); writer.close(); system.out.println( "クライアント[ポート:" + socket.getport() + "]クライアントのメッセージへの返信正常に "); br.close(); socket.close();}}}クライアントコード
java.io.inputStreamReader; Import java.io.outputStreamWriter; Import java.io.reader; Import java.io.writer; Import java.net.socket;/*** socketクライアント*機能説明:** @author A Wise and Bulicid Little Clessisting* @date August 30、2016*/public Class*/Public Class*/public static void main(string [] args){// 3つのクライアントを開く、1つのスレッドは(int i = 0; i <3; i ++){new runnable(){@Override public void run(){try {testClient client = testClientFactory.createClient() client.client.getLocalport()) 8899);}}/***テストクライアント*/static class testclient {/*** constructor* @paramホストIPアドレスは、接続するサーバーのホストIPアドレス* @paramポート接続* @throws例外*/パブリックテストクライアント(ストリングホスト、intポート)スロー例外{//サーバーを確立します。 port); system.out.println( "クライアント[ポート:" + client.getLocalport() + "]サーバーとの接続を確立します...");}プライベートソケットクライアント;プライベートライターライター;/** * @param msg * @param msg */public void send(string msg)throws(string msg){// outputStreamWriter(client.getOutputStream()、 "utf-8");} writer.write(msg); writer.write( "eof/n"); writer.flush(); // wrings system.out.println( "client [port:" + client.getlocalport() + "] condilly"); receive reader reader = new inputstreamReader(client.getInputStream()、 "utf-8")を作成した後にreade {//読み取ります。 != -1){sb.append(new String(chars、0、len));} system.out.println( "client:" + client.getLocalport() + "]メッセージが受信されました。次に、シミュレートしましょう:
1.最初にサーバーを実行します
2。その後、クライアントを実行します(3つのクライアントリクエストを開きます)
デモンストレーションには、サーバー上のEclipseツールとクライアントにIntellij Ideaツールを使用します。この時点で、コンソールにクライアントが印刷したメッセージを見ることができます
ポート番号はクライアントを表します。コンソール上のサーバーによって印刷されたメッセージを振り返りましょう。
要約します
上記は、同じサーバーコードに接続するために複数のクライアントを実装するJavaプログラミングソケットに関するこの記事のすべての内容です。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は全員に時間内に返信します。