1. UDPおよびTCP / IP差
UDP
1コネクション指向のデータ転送は、特に安全ではない
コネクションレス伝送速度ので2.
コネクション指向、パケット損失は、データ転送が存在するので、前記
伝送することができるように、区別せずに4 UDPクライアントとサーバーそして、受信
UDPプロトコルは、シーンを使用するには
、ライブ、オンラインゲームを
TCP / IP
1.接続指向の、より安全なデータ転送
2.接続指向、すべての配信が遅くなるので
指向の接続3.、安全なデータ転送
4. TCP / IPプロトコルは、サーバーとクライアントの明確な概念である
TCP / IPプロトコル使用シナリオの
クライアントのログイン、データのダウンロード、ファイル転送
2. IPクラス
SUNの提供の開発者は、IPアドレスのクラスを使用
InetAddressのの
一般的な方法:
; InetAddressのはgetLocalHost()
クラスオブジェクトのIPアドレスを取得する
のInetAddressのgetByName(文字列strを);
指定されたホスト名に対応するオブジェクトのIPアドレスを取得します
(文字列のInetAddress [] getAllByNameのをSTR);
すべてのクラスオブジェクトに対応する指定されたホスト名、ドメイン名またはIPアドレスを取得します。
package com.qfedu.a_ip;
import java.net.InetAddress;
import java.net.UnknownHostException;
/*
* IP类演示
*/
public class Demo1 {
public static void main(String[] args) throws UnknownHostException {
InetAddress localHost = InetAddress.getLocalHost();
System.out.println(localHost);
InetAddress byName = InetAddress.getByName("DESKTOP-M89SDP7");
System.out.println(byName);
InetAddress byName2 = InetAddress.getByName("www.4399.com");
System.out.println(byName2);
System.out.println("----------------------------------");
InetAddress[] allByName = InetAddress.getAllByName("www.baidu.com");
for (InetAddress inetAddress : allByName) {
System.out.println(inetAddress);
}
System.out.println("----------------------------------");
InetAddress[] allByName1 = InetAddress.getAllByName("www.taobao.com");
for (InetAddress inetAddress : allByName1) {
System.out.println(inetAddress);
}
System.out.println("----------------------------------");
InetAddress[] allByName2 = InetAddress.getAllByName("www.jd.com");
for (InetAddress inetAddress : allByName2) {
System.out.println(inetAddress);
}
}
}
3. UDPデータ伝送
ユーザ・データグラム・プロトコルの
データ転送のすべての操作が実行されるパッケージングデータのパケット転送モードを使用して、クライアント・サーバに対応する概念はありません、とだけ送信部と受信端
ソケットソケット
データ転送動作は、2台のコンピュータ間で対応するソケットのデータ転送を持っている必要があり、必要とされます。UDPプロトコルはプロトコルUDPソケットが存在しなければならない、ここで使用される
;たDatagramSocket()
伝送プロトコルUDPソケット物体側作成し
たDatagramSocket(INTポート);
必要は[ポート]をリッスンするUDPプロトコルを、受信ソケットオブジェクトを作成する指定
エンドの送信パケットのパッキング方法
のDatagramPacketののDatagramPacketの(バイト[] BUF、INT長、InetAddressのアドレス、INTポート);
BUF:転送データに必要なバイト配列
の長さ:アレイ内の現在のバイトは、データ容量のバイト数である
アドレスは:物体側のIPアドレスを受信する
受信側に対応するポート番号:ポート
パケットを受信する受信端は、実施態様
本明細書ブランクパケット有する
のDatagramPacket(バイト[] BUF、INT長)のDatagramPacketのを、
BUF:バイト配列バッファは、典型的には、1024の整数倍である
長さ:現在のバイト配列バッファの容量
UDPコードが実証します
3.1送信端
プロセス:
1.ソケットに対応するUDPサーバ送信側の作成
に指定されたデータが必要で、対応するデータパケットを準備2.
送信データを送信3.
4.閉じるUDP送信端を
package com.qfedu.b_udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/*
流程:
1. 创建UDP服务器对应的发送端Socket
2. 准备对应数据包,需要带有指定数据
3. 发送数据 send
4. 关闭UDP发送端
*/
public class SenderDemo1 {
public static void main(String[] args) throws IOException {
System.out.println("发送端启动");
// 创建对应的Socket
DatagramSocket socket = new DatagramSocket();
// 准备数据包
byte[] bytes = "今天中午吃蒸羊羔...".getBytes();
DatagramPacket packet = new DatagramPacket(bytes, // 字节数组数据
bytes.length, // 字节数组数据长度
InetAddress.getLocalHost(), // 指定接收端IP地址
8848); // 8848对应端口号
// 发送数据包
socket.send(packet);
// 关闭UDP发送端
socket.close();
}
}
3.2受信側
プロセス:
1. UDPサービス、および指定したポート上のリスニングが
新しい空のパケット作成2.
3.ソケットを介してデータを受信
端部を受け入れる4.閉じるUDPサービス
package com.qfedu.b_udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/*
流程:
1. 打开UDP服务,并且监听指定端口
2. 创建新的空数据包
3. 通过Socket接收数据 receive
4. 关闭UDP服务接收端
*/
public class ReceiveDemo1 {
public static void main(String[] args) throws IOException {
// 创建Socket监听端口
DatagramSocket socket = new DatagramSocket(8848);
// 准备空数据包
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
// 接收数据
socket.receive(packet);
// 确定接收到的字节长度
int length = packet.getLength();
System.out.println(new String(buf, 0, length));
// 关闭socket
socket.close();
}
}