C/S
構造: ソフトウェア システム アーキテクチャであるクライアント/サーバー構造。両端のハードウェア環境の利点を最大限に活用し、達成するタスクを端に合理的に割り当て、システムの通信オーバーヘッドを削減しClient
ますServer
。
Socket
ソケットは、TCP/IP
トランスポート層に属するプロトコルをカプセル化するプログラミング呼び出しインターフェイスです。つまり、プラットフォームSocket
上のプロトコル開発を通じて、2 者間のデータ送信用のチャネルを提供します。Android
TCP/IP
Socket
TCP
使用法はプロトコルに基づいて行うことができますUDP
。
TCP
プロトコル(Transmission Control Protocol
)、すなわち、Transmission Control Protocolは、トランスポート層の通信プロトコルである。、、、、およびTCP
によるアプリケーション層プロトコルに基づいています。FTP
Telnet
SMTP
HTTP
POP3
DNS
特徴は:
TCP
接続指向:送信データの使用を指します。TCP
最初に接続を確立する必要があり、送信が完了すると接続が解放されます。- 全二重通信:
TCP
接続が確立されると、双方がいつでもデータを送信できます。 TCP
信頼性:接続を通じて送信されるデータを指し、エラー、損失、重複がなく、順番に到着します。- バイト ストリーム指向: ストリームは、プロセスに出入りする一連の文字です。簡単に言うと、送信するデータ流量が大きすぎることもありますが、
TCP
メッセージの長さには制限があり、一度に送信することはできず、いくつかのデータブロックに分割する必要がありますが、信頼性を確保する必要があり、受信機は、チャンクが前のデータ ストリームに再組み立てされる順序でデータを受信できます。
UDP
プロトコル ( User Datagram Protocol
)、つまりユーザー データグラム プロトコルは、トランスポート層の通信プロトコルです。UDP
アプリケーション層プロトコルに基づいてTFTP
、SNMP
と が存在しますDNS
。特徴は:
- 接続なし:
UDP
データを送信するために接続は必要ありません。 - 信頼性が低い:
UDP
データ パケットは到着するかどうかに関係なく送信されるため、パケット損失が発生する可能性があります。 - パケット指向: データ パケットはデータ パケットと同等です。
UDP
アプリケーション層によって渡されるデータ パケットがどれほど大きくても、UDP
パケットは送信され、TCP
そのように分割されることはありません。 - ブロッキング制御なし: ブロッキングとは、通信サブネットの特定の部分のパケット数が多すぎて処理が遅くなり、その部分またはネットワーク全体のパフォーマンスが低下することを指します。
TCP
接続確立後に同様の状況が発生すると、送信されたデータが宛先に届かず、その繰り返しが繰り返され、ネットワークの混雑がますます増大するため、混雑を制御するには複雑な原理が必要です。UDP
この問題がなければ。
UDP
IP
アプリケーション シナリオ: 電話やリアルタイム ビデオ会議などの多くのリアルタイム アプリケーションでは、ソース ホストが非常に高速でデータを送信する必要があり、ネットワークがブロックされると一部のデータが失われる可能性がありますが、その必要はありません。遅延が大きすぎる場合、現時点では が考えられますUDP
。
Android
クライアントとサーバーの間には、次の 2 つの通信方法と 2 つの通信方法がありHTTP
ますSocket
。
Http
アプリケーション層に属し、データは要求応答方式で送信されます。つまり、ネットワーク接続が確立された後、クライアントがサーバーに要求を送信した後、サーバーがクライアントにデータを送信します。Socket
これはトランスポート層に属し、データをアクティブに送信する方法を採用しています。つまり、ネットワーク接続が確立された後、クライアントがサーバーにリクエストを送信しなくても、サーバーはクライアントにメッセージをアクティブに送信できます。
Socket
使用方法には主に次の 2 種類があります。
- ストリームソケット (
streamsocket
): プロトコルに基づいてTCP
、ストリーム形式で信頼性の高いバイト ストリーム サービスを提供します。 - データグラムソケット ( ):プロトコル
datagramsocket
に基づいて、データグラムを使用してデータのパッケージ化と送信サービスを提供します。UDP
TCP
プロトコルベースSocket
: クライアントはオブジェクトを作成し、Socket
サーバーのIP
アドレスとポート番号を指定して、InputStream
サーバーから送信されたデータを読み取ります。
try {
Socket socket = new Socket("172.16.10.108", 8080);
InputStream inputStream = new FileInputStream("e://a.txt");
OutputStream outputStream = socket.getOutputStream();
byte buffer[] = new byte[4 * 1024];
int temp = 0;
while ((temp = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, temp);
}
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
UDP
プロトコルベースSocket
: クライアントはDatagramSocket
オブジェクトを作成し、リッスンするインターフェイスを指定します。
// 客户端发送数据
try {
DatagramSocket socket = new DatagramSocket(1985);
InetAddress inetAddress = InetAddress.getByName("192.168.1.32");
String string = "哈哈哈哈哈哈";
byte[] data = string.getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, inetAddress, 10025);
socket.send(packet);
} catch (IOException e) {
e.printStackTrace();
}
// 客户端接收数据
try {
DatagramSocket socket = new DatagramSocket(1985);
byte[] data = new byte[4 * 1024];
DatagramPacket packet = new DatagramPacket(data, data.length);
socket.receive(packet);
String result = new String(packet.getData(), packet.getOffset(), packet.getLength());
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
参考
@Android: これは、 Android に基づいた非常に詳細なソケット使用戦略です。ソケット通信
Android 必須: ソケット プログラミングの理解と学習の取り決め