ネットワーク通信例を詳しく解説
概要
1. ネットワークモデル
OSI (Open System Interconnection) モデルは、ネットワーク システム構造の概要であり、ネットワークをアプリケーション層、プレゼンテーション層の 7 つの層に分割します。層、セッション層、トランスポート層、ネットワーク層、データリンク層、物理層。
2. IP プロトコル
ネットワーク層プロトコルは、インターネット上のコンピューターを識別および検索するためのルールを指定します。
3.TCPプロトコル
データ送信の前に、「3ウェイハンドシェイク」によって接続が確立され、データが送信される状況に適しています。高いデータ精度が必要ですが、データ送信前に接続を確立する必要があるため、通信速度が遅くなります。
4. UDP プロトコル
データ送信前に接続を確立する必要がなく、データ送信の精度が高くない場合に適しています。通常、チャット情報はこのプロトコルを通じて送信されます。
5. HTTP プロトコル
HTTP プロトコルは、オペレーティング システムまたはネットワーク アプリケーションがネットワーク サービスにアクセスするためのインターフェイスを提供するアプリケーション層プロトコルです。
6. ポート port
データがコンピューターに到達すると、ターゲット アプリケーションを見つけるために、0 ~ 65535 の範囲の整数値が各アプリケーションに割り当てられます。この整数値は ポートです。ここから、ポートがコンピュータ上のアプリケーション プログラムを表しており、データが所定のプログラムに正確に到達することが保証されていることがわかります。ポートは複数のアプリケーションによって同時に占有されることはできません。アプリケーションが終了した後、ポートはすぐには解放されません。メモリ遅延占有時間は通常非常に短いものです。ポート 0 ~ 1023 は、システム アプリケーションや他のアプリケーションによってすでに占有されています。プログラム設計中は、この範囲のポートを使用しないでください。
7. ソケットソケットはデータを送受信するためのツールです。送信者はソケットを通じてデータを送信し、受信者はソケットを通じて指定されたポートをリッスンしてデータを取得します。
8. TCP プロトコルが使用されるか UDP プロトコルが使用されるかに関係なく、データはバイト形式でのみ送信できます。
II TCP プログラミング
1. ソケットを通じて取得した入力ストリームまたは出力ストリームを閉じると、ソケットが閉じられます。
2. ソケットを通じて取得された出力ストリームは、出力が完了した後に閉じる必要があります。そうしないと、反対側の対応する入力ストリームがブロックされます。出力ストリーム オブジェクトを通じて出力ストリームを閉じるときに、
Socket オブジェクトを同時に閉じると、相手は Socket に対応するオブジェクトを取得できなくなるため、 出力ストリームは、 Socket の shutdownOutput メソッド。
3. クライアントの一般的な手順:
Socket socket=new Socket(String host,int port);//创建客户端Socket,发送与接收数据,需要指明服务器IP与端口OutputStream os=socket.getOutputStream();//获取输出流,向服务器发送数据..........
os.flush();
socket.shutdownOutput();//关闭输出流,防止服务器端阻塞InputStream is=socket.getInputStream();//获取输入流,输入流包含服务器的反馈信息............
socket.close();//关闭socket,同时关闭输入与输出流
ログイン後にコピー
4. サーバーの一般的な手順: Socket socket=new Socket(String host,int port);//创建客户端Socket,发送与接收数据,需要指明服务器IP与端口OutputStream os=socket.getOutputStream();//获取输出流,向服务器发送数据.......... os.flush(); socket.shutdownOutput();//关闭输出流,防止服务器端阻塞InputStream is=socket.getInputStream();//获取输入流,输入流包含服务器的反馈信息............ socket.close();//关闭socket,同时关闭输入与输出流
ServerSocket server=new ServerSocket(int port);//建立服务器端套接字,指定监听端口Socket socket=server.accept();//获取访问客户端的Socket,阻塞线程InputStream is=socket.getInputStream();//获取输入流,其中包含客户端发送的数据.............
OutputStream os=socket.getOutputStream();//获取输出流,向客户端反馈信息..............
os.flush();
os.shutdownOutput();
server.close();
ログイン後にコピー
5.DemoServerSocket server=new ServerSocket(int port);//建立服务器端套接字,指定监听端口Socket socket=server.accept();//获取访问客户端的Socket,阻塞线程InputStream is=socket.getInputStream();//获取输入流,其中包含客户端发送的数据............. OutputStream os=socket.getOutputStream();//获取输出流,向客户端反馈信息.............. os.flush(); os.shutdownOutput(); server.close();
クライアント
rree
サーバー package com.javase.networkCommunication.tcp.demo02;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class ImgClient {public static void main(String[] args) throws UnknownHostException, IOException {
Socket socket = new Socket("192.168.146.1", 10007);
FileInputStream is = new FileInputStream("Files/1.jpg");
OutputStream os = socket.getOutputStream();byte[] buf = new byte[1024];// 先将数据读取到缓冲区,比频繁的从硬盘读取速度快int length = 0;while ((length = is.read(buf)) != -1) {
os.write(buf, 0, length);
}
os.flush();
socket.shutdownOutput();// 如果输出流不关闭,服务端对应的输入流会阻塞InputStream replyIs = socket.getInputStream();//不会阻塞线程byte[] buf01 = new byte[1024];int length01 = replyIs.read(buf01);
String reply = new String(buf01, 0, length01);
System.out.println(reply);
is.close();
socket.close();
}
}
ログイン後にコピー
3 つの UDP プログラミング package com.javase.networkCommunication.tcp.demo02;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class ImgClient {public static void main(String[] args) throws UnknownHostException, IOException { Socket socket = new Socket("192.168.146.1", 10007); FileInputStream is = new FileInputStream("Files/1.jpg"); OutputStream os = socket.getOutputStream();byte[] buf = new byte[1024];// 先将数据读取到缓冲区,比频繁的从硬盘读取速度快int length = 0;while ((length = is.read(buf)) != -1) { os.write(buf, 0, length); } os.flush(); socket.shutdownOutput();// 如果输出流不关闭,服务端对应的输入流会阻塞InputStream replyIs = socket.getInputStream();//不会阻塞线程byte[] buf01 = new byte[1024];int length01 = replyIs.read(buf01); String reply = new String(buf01, 0, length01); System.out.println(reply); is.close(); socket.close(); } }
1. データ処理方法
UDP プロトコルはデータ パケットの形式でデータを送信し、各パケットの最大値は 64k です。
2. データを送信するための一般的な手順:
package com.javase.networkCommunication.tcp.demo02;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import org.junit.Test;public class ImgServer {
@Testpublic void test01() throws IOException {
ServerSocket serverSocket = new ServerSocket(10007);
Socket socket = serverSocket.accept();// 线程阻塞,等待请求System.out.println("hostAddress=" + socket.getInetAddress().getHostAddress());
InputStream is = socket.getInputStream();
FileOutputStream os = new FileOutputStream("Files/2.jpg");
System.out.println(1);byte[] buf = new byte[1024];int length = 0;
System.out.println(2);int count = 3;while ((length = is.read(buf)) != -1) {
os.write(buf, 0, length);
System.out.println(count++);
}
os.flush();
os.close();
System.out.println("图片上传结束");/*PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.write("success");*/OutputStream out = socket.getOutputStream();
out.write("success".getBytes());
out.flush();
socket.shutdownOutput();
System.out.println("响应数据已发出");
serverSocket.close();
}
}
ログイン後にコピー
3. データを受信するための一般的な手順: package com.javase.networkCommunication.tcp.demo02;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import org.junit.Test;public class ImgServer { @Testpublic void test01() throws IOException { ServerSocket serverSocket = new ServerSocket(10007); Socket socket = serverSocket.accept();// 线程阻塞,等待请求System.out.println("hostAddress=" + socket.getInetAddress().getHostAddress()); InputStream is = socket.getInputStream(); FileOutputStream os = new FileOutputStream("Files/2.jpg"); System.out.println(1);byte[] buf = new byte[1024];int length = 0; System.out.println(2);int count = 3;while ((length = is.read(buf)) != -1) { os.write(buf, 0, length); System.out.println(count++); } os.flush(); os.close(); System.out.println("图片上传结束");/*PrintWriter out = new PrintWriter(socket.getOutputStream(), true); out.write("success");*/OutputStream out = socket.getOutputStream(); out.write("success".getBytes()); out.flush(); socket.shutdownOutput(); System.out.println("响应数据已发出"); serverSocket.close(); } }
DatagramSocket socket=new DatagramSocket();//创建数据报套接字用于发送数据//DUP协议采用数据包分段发送数据,因此需要建立数据包,在数据包中指明目的地IP与端口DatagramPacket packet= DatagramPacket(byte buf[], int offset, int length,InetAddress address, int port);
socket.send(packet);
ログイン後にコピー
DatagramSocket socket=new DatagramSocket();//创建数据报套接字用于发送数据//DUP协议采用数据包分段发送数据,因此需要建立数据包,在数据包中指明目的地IP与端口DatagramPacket packet= DatagramPacket(byte buf[], int offset, int length,InetAddress address, int port); socket.send(packet);
以上がネットワーク通信例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











C++ ビッグ データ開発でネットワーク通信を最適化するにはどうすればよいですか? はじめに: 今日のビッグ データ時代では、ネットワーク通信はデータ処理において重要な役割を果たしています。ビッグ データ開発に C++ を使用する開発者にとって、ネットワーク通信のパフォーマンスの最適化は、データ処理効率を向上させる鍵となります。この記事では、C++ ビッグ データ開発におけるネットワーク通信を最適化するためのいくつかの方法をコード例とともに紹介します。 1. 高性能ネットワーク ライブラリを使用する C++ ビッグ データ開発では、高性能ネットワーク ライブラリを選択することが、ネットワーク通信パフォーマンスを最適化するための第一歩です。これらのライブラリは通常、

PHP および NTP プロトコルを介してネットワーク時刻同期通信を実現する方法の概要: ネットワーク タイム プロトコル (ネットワーク タイム プロトコル、NTP と呼ばれる) は、コンピュータ システム時刻を同期するために使用されるプロトコルです。ネットワーク アプリケーションでは、ネットワーク サービスの正常な動作を保証するために、正確な時刻同期が非常に重要です。 PHP では、NTP プロトコルと通信することでネットワーク時刻の同期を実現できます。この記事では、PHP コードを使用して NTP サーバーと通信し、正確なネットワーク時刻を取得する方法を紹介します。ステップ

解決方法: Java ネットワーク通信エラー: 接続タイムアウト Java ネットワークと通信するときに、接続タイムアウト エラーが頻繁に発生します。接続タイムアウトとは、ネットワーク接続を確立するときに、クライアントとサーバー間のハンドシェイク プロセスに、事前に設定された制限時間よりも長い時間がかかることを意味します。ネットワーク通信では、ネットワークの遅延、サーバーの応答の遅さなど、複数の要因によって接続タイムアウト エラーが発生することがあります。この記事では、Java ネットワーク通信における接続タイムアウト エラーを解決する方法を説明し、いくつかのサンプル コードを提供します。ネットワーク接続を確認する まず最初に行う必要があるのは、

解決方法: Java ネットワーク通信エラー: URL の解析に失敗しました Java ネットワーク経由で通信するときに、URL の解析に失敗するエラーが頻繁に発生します。このエラーは通常、URL を解析するときに発生し、有効な URL 形式を正しく解析できません。この問題を解決する前に、Java が提供するいくつかの基本的な URL 概念と関連ツール クラスを理解する必要があります。 URL は、Uniform Resource Locator の略称で、ネットワーク上のリソースの場所を識別するために使用されます。通常、URL はプロトコル、ホスト名、ポート番号、パス、クエリで構成されます。

C# でネットワーク通信の問題に対処する方法には、特定のコード サンプルが必要です。ネットワーク通信は、最新のプログラミングにおいて非常に重要なテクノロジです。ネットワーク アプリケーション、オンライン ゲーム、リモート データ インタラクションのいずれを開発している場合でも、私たちは皆、C# でネットワーク通信の問題を処理する方法を理解する必要があります。この記事では、C# でネットワーク通信を処理する一般的な方法をいくつか紹介し、対応するコード例を示します。 TCP/IP ソケット TCP/IP ソケットは、信頼性の高い接続指向のネットワーク通信プロトコルです。 C# では System を使用できます。

Swooleの開発機能を活用して高同時性のネットワーク通信を実現 概要:Swooleは、PHP言語をベースとした高機能なネットワーク通信フレームワークで、コルーチン、非同期IO、マルチプロセスなどの機能を備えており、同時性の高い開発に適しています。ネットワークアプリケーション。この記事では、Swoole を使用して同時実行性の高いネットワーク通信機能を開発する方法といくつかのコード例を紹介します。はじめに インターネットの急速な発展に伴い、特に同時実行性の高いシナリオでは、ネットワーク通信の要件がますます高くなっています。従来の PHP 開発は同時処理能力が弱いという問題に直面しています

世界 3 大通信大手: 1. 1987 年に設立されたファーウェイは、安定した運用、継続的なイノベーション、オープンな協力を堅持し、ICT 分野に重点を置く世界有数の情報通信技術 (ICT) ソリューション プロバイダーです; 2. エリクソン, 1876 年と 1877 年に設立され、通信分野に携わっていました。アメリカの電話機がスウェーデン市場に参入したおかげで、エリクソン社は電話機の製造技術について検討し始めました。3. 1865 年に設立されたノキア社は、通信分野に参入し始めました。 1960年の通信。

コルーチンを使用して GO 言語で効率的なネットワーク通信を実現する方法 はじめに: インターネットの急速な発展に伴い、ネットワーク通信の重要性がますます高まっています。最新の開発では、Go 言語は並行プログラミング言語であり、その強力なコルーチン機能によりネットワーク通信がより効率的になります。この記事の目的は、コルーチンを使用して、一般的なサーバーおよびクライアントのプログラミングなど、Go 言語で効率的なネットワーク通信を実現する方法を紹介することです。 1. 基本概念 コルーチンを使用して効率的なネットワーク通信を実現する方法を説明する前に、まず次のようないくつかの基本概念を理解する必要があります。
