Javaネットワークプログラミング2.UDPネットワークプログラミング
4519 ワード
UDPネットワークプログラミング——DatagramSocketクラス
1、UDPプロトコル送信データ——クライアント
(1)UDPプロトコルがデータを送信するステップ: UDPプロトコル送信データ A:送信側Socketオブジェクト を作成する B:データを作成し、 にパッケージ化 C:Socketオブジェクトの送信方法を呼び出すパケット を送信する. D:リソースの解放
(2)UDPプロトコルによるデータ送信方法 DatagramSocket():送信側Socketオブジェクト を作成する. DatagramPacket(byte[]buf,int length,InetAddress address,int port):データを作成し、データをパッケージ化(送信パケット) DatagramPacket dp = new DatagramPacket(bys, length, address, port);
public void send(DatagramPacket p):Socketオブジェクトの送信方法を呼び出してパケット を送信する. ds.close():リソースを解放する (3)UDPプロトコル送信データの例
2、UDPプロトコル受信データ——サーバー側
(1)UDPプロトコル受信データステップ UDPプロトコル受信データ A:受信側Socketオブジェクト を作成する B:パケット(受信コンテナ) を作成する C:Socketオブジェクトを呼び出す受信方法受信データ D:パケットを解析し、コンソール に表示する. E:リソースの解放
(2)UDPプロトコル受信データ方法 DatagramSocket(int port):受信側Socketオブジェクトを作成する DatagramPacket(byte[]buf,int length):パケット(受信コンテナ)を作成する public void receive(DatagramPacket p):Socketオブジェクトを呼び出す受信メソッド受信データ(ブロックメソッド) . public InetAddress getAddress():相手のip を取得する public byte[]getData():取得データバッファ public int getLength():取得データの実際の長さ ds.close():リソースを解放する (3)UDPプロトコル受信データ例
3、UDPネットワークプログラミングの最適化
(1)UDPプロトコル送信データの最適化
(2)UDPプロトコル受信データの最適化
1、UDPプロトコル送信データ——クライアント
(1)UDPプロトコルがデータを送信するステップ:
(2)UDPプロトコルによるデータ送信方法
package cn.itcast_02;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class SendDemo {
public static void main(String[] args) throws IOException {
// Socket
// DatagramSocket()
DatagramSocket ds = new DatagramSocket();
// ,
// DatagramPacket(byte[] buf, int length, InetAddress address, int port)
//
byte[] bys = "hello,udp, ".getBytes();
//
int length = bys.length;
// IP
InetAddress address = InetAddress.getByName("192.168.12.92");
//
int port = 10086;
DatagramPacket dp = new DatagramPacket(bys, length, address, port);
// Socket
// public void send(DatagramPacket p)
ds.send(dp);
//
ds.close();
}
}
2、UDPプロトコル受信データ——サーバー側
(1)UDPプロトコル受信データステップ
(2)UDPプロトコル受信データ方法
package cn.itcast_02;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
// Socket
// DatagramSocket(int port)
DatagramSocket ds = new DatagramSocket(10086);
// ( )
// DatagramPacket(byte[] buf, int length)
byte[] bys = new byte[1024];
int length = bys.length;
DatagramPacket dp = new DatagramPacket(bys, length);
// Socket
// public void receive(DatagramPacket p)
ds.receive(dp); //
// ,
// dp IP : ip
// public InetAddress getAddress()
InetAddress address = dp.getAddress();
String ip = address.getHostAddress();
// public byte[] getData():
// public int getLength():
byte[] bys2 = dp.getData();
int len = dp.getLength();
String s = new String(bys2, 0, len);
System.out.println(ip + " :" + s);
//
ds.close();
}
}
3、UDPネットワークプログラミングの最適化
(1)UDPプロトコル送信データの最適化
package cn.itcast_03;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class SendDemo {
public static void main(String[] args) throws IOException {
// Socket
DatagramSocket ds = new DatagramSocket();
//
byte[] bys = "helloworld".getBytes();
DatagramPacket dp = new DatagramPacket(bys,bys.length,InetAddress.getByName("192.168.12.92"), 12345);
//
ds.send(dp);
//
ds.close();
}
}
(2)UDPプロトコル受信データの最適化
package cn.itcast_03;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/*
* :java.net.BindException: Address already in use: Cannot bind
* : 。
*/
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
// Socket
DatagramSocket ds = new DatagramSocket(12345);
//
byte[] bys = new byte[1024];
DatagramPacket dp = new DatagramPacket(bys, bys.length);
//
ds.receive(dp);
//
String ip = dp.getAddress().getHostAddress();
String s = new String(dp.getData(), 0, dp.getLength());
System.out.println("from " + ip + " data is : " + s);
//
ds.close();
}
}