Java.IOソケットとServerSocketエントリの戦闘

出典:MOOC

 

  IOの一般的な使用シナリオは、ネットワーク通信またはファイルの読み取りです。IOストリームは、バイトストリームと文字ストリームに分けられます。バイトはバイトで、8つの2進数を含み、2進数は1ビットです。中国の名前はビットと呼ばれます。文字は、文字または漢字です。文字は1バイトで構成され、漢字はエンコードに応じて2または3で構成されます。Java.ioパッケージは次のとおりです。詳細なAPIは自分で参照できます

  

 

  ソケット定義ソケット(ソケット)は、アプリケーションがデータを送受信できる抽象化レイヤーであり、ファイルのオープン、読み取り、書き込み、クローズなどの操作を実行できます。ソケットを使用すると、アプリケーションはI / Oをネットワークに挿入し、ネットワーク上の他のアプリケーションと通信できます。ネットワークソケットは、IPアドレスとポートの組み合わせです。

  2つのマシンまたはプロセス間のネットワーク通信のエンドポイントとして理解でき、このエンドポイントにはIPアドレスとポート番号が含まれています。

  SocketとServerSocketの違いはその名前に似ており、簡単に言うと、ServerSocketはサーバー上でクライアントメッセージを監視します。ソケットはクライアントに作用してメッセージを送信します。ただし、前述のように、すべてIPアドレスとポート番号が含まれています。

  SocketおよびServerSocketの実際の戦闘:

  まず、最も一般的なJavaプロジェクトを作成します。次に、サーバーとクライアントの2つのクラスを作成します。コードとコメントは次のとおりです。

public  class Client {
     public  static  void main(String [] args){
         // これはサーバーのIPとポートです
        final final DEFAULT_SERVER_HOST = "127.0.0.1" ;
         final  int DEFAULT_SERVER_PORT = 8888 ;
         // ソケットの作成
        try(Socket socket = new Socket(DEFAULT_SERVER_HOST、DEFAULT_SERVER_PORT)){
             // メッセージを受信する 
            BufferedReader reader = new BufferedReader(
                     new InputStreamReader(
            new InputStreamReader(socket.getInputStream())
            )); // メッセージを送信する
            BufferedWriter writer = new BufferedWriter(
                     new OutputStreamWriter(socket.getOutputStream())
            ); 
            // ユーザーが入力したメッセージを取得する 
            BufferedReader userReader = new BufferedReader(
                     new InputStreamReader(System.in)
            ); 
            String msg = null ;
             // ループ内のクライアントメッセージはいつでも入力できます。そうしないと、リソースはtry catchの実行後に自動的に解放されます。つまり、
            whiletrue ){ 
                String input = userReader.readLine();
                 //クライアントが送信するメッセージを記述します。サーバーはreadLineを使用してメッセージを取得するため、メッセージは\ nで終わるため、\ nを追加する必要があり 
                ます。writer.write(input + "\ n" ); 
                writer.flush(); 
                msg = reader.readLine(); 
                System.out.println(msg); 
                // クライアントが終了した場合、ループからジャンプして切断
                できますif(input.equals( "quit" )){
                     break ; 
                } 
            } 
        } catch (IOException e){ 
            e。 printStackTrace(); 
        } 
    } 
}

  

public  class Server {
     public  static  void main(String [] args){
         final  int DEFAULT_PORT = 8888 ;
         // Create ServerSocket listen 8888 port 
        try(ServerSocket serverSocket = new ServerSocket(DEFAULT_PORT)){ 
            System.out.println( "ServerSocket Start、ポートは次のとおりです: "+ DEFAULT_PORT);
             whiletrue){ // このポートへのノンストップリスニング
                 // クライアントリクエストがない場合はリスニングをブロックし、ここにとどまる 
                Socket socket = serverSocket.accept(); 
                System。 out.println("Client [" + socket.getPort()+ "] Online" );
                // 受信消息 
                BufferedReaderリーダー= new BufferedReader(
                         new InputStreamReader(socket.getInputStream())
                ); 
                // 送信消息 
                BufferedWriter writer = new BufferedWriter(
                         new OutputStreamWriter(socket.getOutputStream())
                ); 

                文字列msg = null ;
                while((msg = reader.readLine())!= null ){ 
                    System.out.println("Client [" + socket.getPort()+ "]:" + msg);
                     // 
                    サーバーから送信されるメッセージを書き込む writer.write( "Server:" + msg + "\ n" ); 
                    writer.flush( ); 
                    // クライアントのメッセージが終了した場合、クライアントは終了してループを抜け、メッセージを受信する必要はありません。クライアントが再び接続する場合、
                    if(msg.equals( "quit" )){ 
                        System.out.println( "Client [" + socket.getPort()+ "]:Offline" );
                         break ; 
                    } 
                } 
            } 
        } catch (IOException e){ 
            e.printStackTrace();

 

  次に、2つのコマンドターミナルを開き、javacでコンパイルした後、1つはサーバーの代わりにサーバーを実行し、もう1つはクライアントの代わりにクライアントを実行します。

 

おすすめ

転載: www.cnblogs.com/lbhym/p/12673470.html