通信網
ネットワーク通信プロトコル
コンピュータのネットワークが相互に通信できるようにするには、データ伝送速度、伝送コード、コード構造、伝送制御ステップ、エラー制御などに関する一連の標準を策定する必要があります。この共通の通信標準のセットがネットワーク通信プロトコルです。異なるコンピュータが通信するには、同じ通信プロトコルを使用する必要があります。
7層モデル
OSI (Open System Interconnection) 参照モデルとしても知られる 7 層モデルは、コンピュータまたは通信システム間の相互接続のために国際標準化機構 (ISO) によって開発された標準システムです。これは 7 層の抽象的なモデル本体であり、一連の抽象的な用語や概念だけでなく、特定のプロトコルも含まれています。
ISOはInternationalization Standard Organization(国際標準化機構)の略です。
[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-cYtCji5C-1661734006742) (D:\Feisi Training Three\Blog\My\15.Network\assets\image-20220823085931473.png)]
TCP/IPプロトコル
TCP/IP プロトコルは、インターネットで最も広く使用されている通信プロトコルです。TCP/IPとは英語のTransmission Control Protocol/Internet Protocolの略で、「伝送制御プロトコル/インターネットプロトコル」を意味します。
**ネットワーク:** 2 台以上のコンピュータ間の通信
ワイド エリア ネットワーク (WAN) は、私たちが通常インターネットと呼んでいるもので、世界中に広がるネットワークです。
ローカル エリア ネットワーク ((LAN) イントラネット) は、ワイド エリア ネットワーク(WAN)とは対照的に、主に狭いエリア内のコンピュータ相互接続ネットワークを指します。この「小さな範囲」には、家族、学校、会社、政府部門などがあります。
TCP/IP プロトコルは、電子デバイス (コンピュータなど) をインターネットに接続する方法と、それらの間でデータを送信する方法の標準を定義します。
コンピュータ間の通信に便利なIPコンピュータ固有のアドレスで、各バイトを「.」で区切った4バイトで構成されます。 各ビットの範囲:0~255
IP アドレスは、政府機関向けのクラス A、中堅企業向けのクラス B、必要なすべての人に割り当てられるクラス C、マルチキャスト用のクラス D、実験用のクラス E の 5 つのクラスに分かれており、クラスごとに異なるアドレス データを収容できます。
[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-mCNygiEv-1661734006743) (D:\Feisi Training Three\Blog\My\15.Network\assets\image-20220823095748320.png)]
ドメイン名IP を置き換えるにはドメイン名 (英語の記号) を使用します。各ドメイン名は IP アドレスにマップされます。たとえば、Baidu ドメイン名 www.baidu.com は IP アドレス 14.215.177.39 にバインドされ、Baidu にアクセスするには: IP に従ってアクセスします。
IP アドレスは、どのコンピュータと通信するかを決定するために使用できます。最下層: ドメイン名を IP アドレスに変換します。
Portポート番号、0~65535、このコンピュータと通信するプログラムを指定できるネットワーク機能を持つアプリケーションソフトウェアの識別番号。0 ~ 1023 は認識されたポート番号、つまり認識および定義されるソフトウェア用に認識または予約されているポート番号です。1024 ~ 65535 は公的に定義されていないポート番号であり、ユーザーがこれらのポートの機能を自分で定義できます。
http: デフォルトのポート: 80
https: デフォルトのポート: 443
mysql のデフォルトのポート: 3306
ポート: TCP: 0~65535 UDP: 0~65535
TCPはコネクション指向で信頼性の高い、バイト ストリーム ベースのトランスポート層プロトコルです。TCP が通信する場合、データを送信する前に相手との接続を確立します (TCP プロトコルには 3 つのセッション (ハンドシェイク)、3 ウェイ ハンドシェイク メカニズムが必要です)。
[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-UuqKDiGP-1661734006744) (D:\Feisi Training Three\Blog\My\15.Network\assets\image-20220823093236623.png)]
TCP通信
ソケットプログラミング:
ソケット (クライアントのソケット)
ServerSocket (サーバーソケット(Socket))
[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-qYIfgtCT-1661734006746) (D:\Feisi Training Three\Blog\My\15.Network\assets\image-20220823103822975.png)]
接続が確立されると、サーバーは Socket オブジェクトを作成します。クライアントとサーバーは、Socket オブジェクトの書き込みと読み取り (バイト ストリーム) によって通信できるようになりました。
ストリームソケット: TCP、接続指向
[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-baAQQ8Oo-1661734006746) (D:\Feisi Training 3\Blog\My\15.Network\assets\image-20220823105048585.png)]
コアクラス
ServerSocket: サーバーソケット、クライアント接続を待機しています
コンストラクター (指定されたポートにバインド)
[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-exxuFu0w-1661734006747) (D:\Feisi Training Three\Blog\My\15.Network\assets\image-20220823105301424.png)]
一般的な方法
このメソッドは、この ServerSocket からの接続をリッスンして受信し、接続が渡されるまでブロックします。
[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-xsjn10ld-1661734006748) (D:\Feisi Training Three\Blog\My\15.Network\assets\image-20220823105432115.png)]
ポートをリッスンしてクライアントからの接続を待ちます。クライアントが接続したら、クライアントと 1 対 1 のソケットを取得します。
ソケットクラス
ソケットの構造は9種類ありますが、よく使われる工法は以下の2つです。
施工方法 | 説明する |
---|---|
ソケット(文字列ホスト、intポート) | ホスト host のポート port への接続リクエストを開始します。 |
[ソケット](mk:@MSITStore:C:\DOCUME 1\ADMINI 1\LOCALS~1\Temp\Rar DI a 0.501 % 5 b Java 参考下ダウンロード DIa0.501\%5bJava 参考下ダウンロード%5d.JDK_API_1_6_zh_CN.CHM::/java/net/Socket.html#Socket(java.lang.String, int, java.netAddress, int)) MSITStore:C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\RarD I a 0.501%5 b JavaリファレンスドキュメントDIa0.501 %5bJava リファレンス ドキュメント%5d.JDK_API_1_6_zh_CN.CHM::/java/lang/String.html) host, int port, InetAddress localAddr, int localPort ) | ホスト host のポート port への接続要求を開始します。要求を開始するコンピューターは localAddr で、ポートは localPort です。 |
[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-glLPeIhM-1661734006749) (D:\Feisi Training Three\Blog\My\15.Network\assets\image-20220823105552852.png)]
[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-9pNoMVQy-1661734006750) (D:\Feisi Training Three\Blog\My\15.Network\assets\image-20220823110444218.png)]
[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-YxEWLvqD-1661734006751) (D:\Feisi Training Three\Blog\My\15.Network\assets\image-20220823110559349.png)]
[外部リンク画像の転送に失敗しました。ソース サイトには盗難防止リンク メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-U8Mz4jxd-1661734006752) (D:\Feisi Training Three\Blog\My\15.Network\assets\image-20220823110626378.png)]
[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-CqcNULqa-1661734006752) (D:\Feisi Training Three\Blog\My\15.Network\assets\image-20220823110637452.png)]
[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-ZybEEgov-1661734006753) (D:\Feisi Training Three\Blog\My\15.Network\assets\image-20220823110637452.png)]
TCP通信手順
サービスターミナル
1:) ServerSocketを作成する
2:) accept() を呼び出し、クライアントが接続するまで待機します。
3:) クライアントの Socket オブジェクトを取得し、getInputStream() getOutputStream() を呼び出して入力ストリームと出力ストリームを取得します。
4:) 入力ストリームはデータを受信し、出力ストリームはデータを送信します
5:) リソースを閉じる
クライアント
1:) ソケットを作成し、サーバーのアドレス、ポートを要求し、サーバーに接続します。
2:) getInputStream() getOutputStream() を呼び出して入力ストリームと出力ストリームを取得します。
3:) 出力ストリームはデータを送信し、入力ストリームはデータを受信します。
4:) リソースを閉じる
開始シーケンス: 最初にサーバーを開始し、次にクライアントを開始します。
サーバープログラミング
public class Server {
public static void main(String[] args) {
ServerSocket server = null;
Socket socket = null;
try {
//准备服务器端用的通讯对象(套接字),指明端口号为8888
server = new ServerSocket(8888);
//到指定端口去阻塞监听,一旦有客户端请求发送过来,那么立即自动与客户端建立连接
socket = server.accept();
System.out.println("服务器端准备ok");
//我要发送到客户端的内容
String msg = "你好,我是服务器,这是我的第一次通讯,请问你收到了吗";
OutputStream os = socket.getOutputStream();//准备输出对象
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
bw.write(msg);
bw.newLine();
bw.flush();
//接收客户端发送的信息
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String reply = br.readLine();
System.out.println("我是服务器,接收到信息:"+reply);
br.close();
is.close();
bw.close();
os.close();
socket.close();
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
クライアントプログラミング
public class Client {
public static void main(String[] args) {
Socket socket = null;
try {
socket = new Socket("localhost", 8888);
System.out.println("客户端准备完成");
//客户端开始接受请求
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String msg = br.readLine();
System.out.println("我是客户端,接收到信息:"+msg);
//客户端接收到服务器端的信息之后,需要反馈信息给服务器
//客户端想要反馈给服务器端的信息
String reply = "我是客户端,收到你的信息,这是我的反馈";
OutputStream os = socket.getOutputStream();//准备客户端的输出流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
bw.write(reply);
bw.newLine();
bw.flush();
bw.close();
os.close();
br.close();
is.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
プログラムを複数回実行するように設定するアイデア
[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-XOJ58gpG-1661734006754) (D:\Feisi Training Three\Blog\My\15.Network\assets\image-20220823114549421.png)]
[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-NO1RPl2d-1661734006755) (D:\Feisi Training 3\Blog\My\15.Network\assets\image-20220823114719745.png)]
[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-Nc0x4dS6-1661734006755) (D:\Feisi Training Three\Blog\My\15.Network\assets\image-20220823114752213.png)]
UDP通信
概念 e) { e.printStackTrace(); } } }
#### idea设置一个程序运行多次
[外链图片转存中...(img-XOJ58gpG-1661734006754)]
[外链图片转存中...(img-NO1RPl2d-1661734006755)]
[外链图片转存中...(img-Nc0x4dS6-1661734006755)]
## UDP通信