出典: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の実行後に自動的に解放されます。つまり、 while(true ){ 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); while(true){ // このポートへのノンストップリスニング // クライアントリクエストがない場合はリスニングをブロックし、ここにとどまる 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つはクライアントの代わりにクライアントを実行します。