この記事では、参照用の簡単なグリーティングサービスを実装するためのJavaソケットプログラミングの詳細なコードについて説明します。特定のコンテンツは次のとおりです
サーバー側:
最もシンプルなハローサービスを実装し、クライアントIPアドレスをコンソールに印刷し、接続されたクライアントに一連のキャラクター(Hello、Javaソケット)を送信し、クライアントとの接続を閉じます。次のクライアントの接続リクエストが到着するのを待ちます。
クライアント:
Hello Serverに接続するための最もシンプルなソケットを実装し、サーバーから送信されたBYTEデータを受け入れ、コンテンツをコンソールに印刷します。
重要なヒント:
Javaは多くの入力および出力ストリームAPIを提供するため、多くの初心者はJavaソケットプログラミングにさらされ、ネットワークバイト通信の性質を理解していないため、ReadLine()によってソケットバイトストリームを直接受け入れます。ただし、送信者は /r /nを送信しないため、データを読み取ることはできません。これは最も一般的なエラーです。他のいくつかの一般的な間違いには、受け入れられたバッファーの初期化がなく、文字化された文字になり、読み取りで受信したバイト数に応じて再組み立てされないため、受信したデータが例外になります。そのため、コードはBYTEによって送信されたものとBYTEによる受け入れを示します。これは、ネットワークプログラミングの非常に重要な概念と原則です。入力ストリームprintln()メソッドと出力ストリームreadline()メソッドを地獄に移動します。使いやすいわけではないというわけではありませんが、ネットワークプログラミングの本質の理解と理解を妨げるため、使用しないことをお勧めします。また、特別なメモを作成したいのですが、バッファー付き入力と出力ストリームを使用してバイトを読み書きしない限り、Flush()が必要ではない場合があります。
サーバー側のコード:
パッケージcom.gloomyfish.socket.tutorial.two; java.io.dataoutputStreamをインポートします。 java.io.ioexceptionをインポートします。 java.net.serversocketをインポートします。 java.net.socketをインポートします。パブリッククラスのHelloServiceはスレッドを拡張します{private Serversocket Serversocket; public helloservice(int port)throws ioexception {serversocket = new Serversocket(port); } public void run(){try {while(true){system.out.println( "ポートでクライアントの待機" + serversocket.getLocalport());ソケットクライアント= serversocket.accept(); //収入ソケットSystem.out.Printlnをブロックして待機しています( "接続のJust" + client.getRemoteSocketAddress()); dataoutputStream dos = new DataOutputStream(client.getOutputStream()); byte [] hello = "hello、java socket" .getBytes(); dos.write(hello、0、hello.length); dos.close(); client.close(); }} catch(例外e){e.printstacktrace(); }} public static void main(string [] args){try {helloservice service = new HelloService(9999); service.start(); } catch(ioexception e){e.printstacktrace(); }}}サーバーはポート9999に耳を傾け、接続を待ち、Javaスレッドを使用してサーバー側の起動を実現します。
クライアントコードは次のとおりです。
パッケージcom.gloomyfish.socket.tutorial.two; java.io.datainputStreamをインポートします。 java.io.ioexceptionをインポートします。 java.net.inetsocketAddressをインポートします。 java.net.socketaddressをインポートします。 java.net.socketaddressをインポートします。 Public Class Helloclient {private int clientNumber;プライベートソケットアドレスアドレス。 public helloclient(int clientnum){clientnum = clientnum; } public void setupClients(String ServerHostName、int port)throws ioException {address = new inetsocketAddress(serverHostname、port); for(int i = 0; i <clientNumber; i ++){system.out.println(); system.out.println( "clirt client no." +(i + 1));ソケットソケット= new Socket(); socket.connect(アドレス); DatainputStream BufferedReader = new DatainputStream(socket.getInputStream()); byte [] cbuff = new byte [256]; char [] charbuff = new char [256]; int size = 0; while((size = bufferedreader.read(cbuff))> 0){convertbytetochar(cbuff、charbuff、size); System.out.println(Charbuff); } bufferedreader.close(); socket.close(); }} private void convertbytetochar(byte [] cbuff、char [] charbuff、int size){for(int i = 0; i <charbuff.length; i ++){if(i <size){charbuff [i] =(char)cbuff [i]; } else {charbuff [i] = ''; }}} public static void main(string [] args){try {helloclient client = new helloclient(10); client.setupClients( "localhost"、9999); } catch(ioexception e){e.printstacktrace(); }}} 10のクライアントを開始してサーバー側に接続し、サーバーの挨拶を受信した後、クライアントは接続を閉じます。
特別なヒント:バッファーチャーバフを初期化してください
プログラムの実行結果:
上記はこの記事に関するものです。すべての人の学習に役立つことを願っています。