ネットワークプログラミングの3要素
ネットワーク通信プロトコル
- 物理層/データリンク層
- ネットワーク層
- トランスポート層
- アプリケーション層
IP
Ipv4 : 4バイト
Ipv6:16バイト
ポート番号
2バイトで構成
0~65535の範囲
ヒント
- 2014年のポート番号は使用できず、システムによって既知のネットワーク・ソフトウェアに割り当てられています。
- データベース MySql : 0336
- データベース Oracle : 2511
- Tomcatサーバー:8080
TCP通信プロトコル
概要
TCP通信はコネクション指向の通信であり、クライアントとサーバーは通信を行う前に、次の3つのハンドシェイクを経て論理的なコネクションを確立する必要があります。
ステップ
- サーバー側の起動
- クライアント側のリクエスト
- IOオブジェクトを含む接続の作成
- クライアントとサーバーは、このIO オブジェクトを使用して通信できます。
- 通信データは単なる文字ではないので、IOオブジェクトはバイトストリームオブジェクトです。
表現
サーバー側:ServerSocketクラス
クライアント:ソケットクラス
ダイアグラム
ソケット
Socket このクラスはクライアント・ソケットを実装しており、これは2つのマシン間の通信のエンドポイントです。
Socket(ソケット):IPアドレスとポート番号を含むネットワーク単位。
コードの実装
). クライアント側の実装
public static void main(String[] args) throws IOException{
//1.サーバーの名前またはIPアドレスとポート番号をパラメータとしてソケットオブジェクトを作成する。
Socket socket = new Socket(".1",8888);
//2.ソケットの出力ストリームオブジェクトを取得する
OutputStream outputStream = socket.getOutputStream();
//3.出力ストリーム・オブジェクトを使ってサーバーにデータを送る
outputStream.write("ハロー・サーバー );
//4.サーバーから書き戻されたデータを読む
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte;
int len = inputStream.read(bytes);
System.out.println(new String(bytes,0,len));
//5.リソースを解放する
socket.close();
}
). サーバー側の実装
public class TCPServer{
public static void main(String[] args) throws IOException{
//1.指定されたポート番号でサーバーソケットを作成する
ServerSocket severSocket = new ServerSocket(8888);
//2. サーバーソケットのaccept()メソッドを使用して、要求されたクライアントオブジェクトを取得する。
Socket socket = serverSocket.accept();
//3. 取得したクライアント・オブジェクトのgetInputStream()メソッドを使用してバイト入力ストリームを取得する。
InputStream inputStream = socket.getInputStream();
//4. クライアントから送信されたデータを読む
byte[] bytes = new byte;
int len = inputStream.read(bytes);
System.out.println(new String(bytes,0,len));
//5. クライアントにデータを書き戻す
OutputStream outputStream = socket.getOutputStream();
outputStream.write("感謝".getBytes());
//6. リソースを解放する
socket.close();
serverSocket.close();
}
}