ソケットとは何ですか
ネットワーク上の2つのプログラムは、この2つのウェイリンクの片端を介してデータ交換を実装しています。ソケットは通常、顧客とサービスパーティーの間の接続を実現するために使用されます。 Socketは、TCP/IPプロトコルの非常に人気のあるプログラミングインターフェイスであり、ソケットはIPアドレスとポート番号によって決定されます。
ただし、ソケットでサポートされるプロトコルのタイプはTCP/IPであるだけではないため、2つの間に必ずしも接続はありません。 Java環境では、ソケットプログラミングとは、主にTCP/IPプロトコルに基づくネットワークプログラミングを指します。
ソケット通信のプロセス
サーバーEndの聴取(モニター)に接続要求があるかどうか、クライアントがサーバー側に接続要求を送信し、サーバーがアクセスメッセージをクライアントに送信します。接続が確立されます。サーバーとクライアントの両方が、送信、書き込み、その他の方法を通じて相手と通信できます。
フルフィーチャーソケットの場合、次の基本構造には次の4つの基本的な手順が含まれています。
(1)ソケットを作成します。
(2)ソケットに接続された入力/アウトフローを開きます。
(3)特定のプロトコルに従って、ソケットの操作を読み取り/書き込みます。
(4)ソケットの電源を切る。何かを引き起こすことはありません。
ソケットを作成します
Javaは、java.netに2種類のソケットとサーバーケットを提供します。これは、2つのウェイ接続のクライアントとサーバーを表すために使用されます。これらは非常に優れた2つの非常に優れたクラスであり、使用するのに便利です。構造法は次のとおりです。
Socket(IndDdressアドレス、IndAddressアドレス、String Host、Int Prot); localaddr、intadddressアドレス、intadddress localddr)
その中で、2つのウェイ接続のIPアドレス、ホスト名、およびポート番号は、それぞれソケットがストリームソケットかデータのソケットであるかを示します。 Serversocketのホストアドレス)、Implはソケットの親クラスであり、Serversocketの作成に使用でき、ソケットの作成に使用できます。カウントとは、サーバーがサポートできる接続の最大数を意味します。例:ビデオネットワークの学習http://www.xxspw.com
ソケットクライアント=新しいソケット
ポートを選択するときは、注意する必要があることに注意してください。各ポートは特定のサービスを提供します。 0〜1023のポート番号はシステムによって予約されています。たとえば、HTTPサービスのポート番号は80、Telnetサービスのポート番号は21、FTPサービスのポート番号は23です。ポート番号を選択すると、1023を超えるものを選択するのが最善です。数値は競合を防ぐことです。
ソケットの作成時にエラーが発生した場合、IOExceptionが生成され、プログラムで処理する必要があります。したがって、ソケットまたはサーバーソケットの作成をキャプチャまたはスローする必要があります。
コード
サーバ
パッケージソケット;インポートJava.net 。 " +count +" times "); count ++; string line = input.readline(); system.out.println(" +line); if( "line.equals(" exit ")) ){flag = false.out.println( "クライアントはもう再生したくない!");} client {client .close();}}最後に{server.close();}}}}
クライアント
パッケージソケット。.0.1 "、9091); try {printwriter output = new PrintWriter(client.getputStream()、scanner cin = new scanner(system.in); string words; while(cin.h asnext()){words = cin nextline() }}}}}}サーバーバインディングIP
cを使用してソケットを書くと、sin_addr.s_addrを指定できます。つまり、IPアドレスがあるのはなぜですか。
ETH0ネットワークカードのIPアドレスをバインドしたい場合があります。これは、LOとWLAN0が1つのポートでNginx仮想ホストを使用している可能性があるため、サーバーでサーバーが開かれている場合があります。
プラン
サーバーソケットのコンストラクターは次のとおりです。
public Serversocket(int port、intadddddress bindddr)はioExceptionをスローします
パラメーター:
ポート - ローカルTCPポート
バックログ - バックログへのリスト
bindaddr-サーバーによってバインドされます
InetAddressにはコンストラクターがないため、StackoverFlowをチェックしています。
たとえば、コード
indadress bindip = inetAddress.getByname( "192.168.1.168");
同時アクセス
サーバーは、マルチスレッドリクエストを同時に処理します。
サーバーコード
java.io.io.inetstreaderのインポートStatic Int ClientNum = 0; String boid main [])スロー{serversocket me( "192.168.1.168") )、caperizeServer.clientnum ++); (Socket S、int id){this.client = s; true){string data = input.readline(); if( "bye"){system.out.println( "current" + this.id + " ) ;} catch(ioexception e){e.printstacktrace();}}}}}}}}}}}}}
クライアントコードクライアントコードは基本的に変更されておらず、出口操作を追加します
PackageCapitalSocket; 1.168 "、9898); try {printwriter output = new PrintWriter(client.getOutputStream()、true); scanner cin = new scanner(system.in); string words; while(cin .hasnext()){words = cin。 nextline(); output.println(words.equals(bye "){break;} // ;}最後に{client.close();}}}