Javaプログラミング--ネットワークプログラミング(UDP)
6177 ワード
Javaプログラミング--ネットワークプログラミング(UDP)
一.UDPプロトコル送信データ:
(1)送信先socketオブジェクトの作成
(2)データを作成し、データを包装する
(3)socketオブジェクトの送信方法を呼び出してパケットを送信する
(4)資源の放出
UDP送信側に関する方法:
java.net類Datagram Socketjava.lang.Object java.net.DatagramSocketのような表現は、データパケットを送信および受信するためのソケットです。
java.net類Datagram Packetjava.lang.Object java.net.DatagramPacketなどはデータパケットを表します。
public void send(Datagram Packet) p):このソケットからパケットを送信します。Datagram Packet 含まれる情報は、送信するデータ、その長さ、リモートホストのIPアドレス、およびリモートホストのポート番号を示しています。
public DatagramPacket(byte[] buf,int length,InetAddress address、int port)パケットを作成し、長さをlengthとする。 指定されたホスト上の指定ポート番号にパケットを送信します。length パラメータがbuf.length以下でなければなりません。パラメータ: buf - データを包むlength - 長さを包むaddress - 宛先ポーター - 目的ポート番号
【ケース】UDP送信端を作成します。
(1)送信先socketオブジェクトの作成(ポート指定が必要)
(2)パケットを作成する(受信容器)
(3)socketオブジェクトの受信方法を呼び出してデータを受信する
(4)データを解析し、コンソールに表示する
(5)資源の放出
UDP受信側に関する方法:
public DatagramSocket(int) port):データグラムソケットを作成し、ローカルホスト上の指定ポートにバインドする。
Datagram Packet(byte[] buf,int length):Datagram Packetを作成し、受信長はlengthである。 のパケットです
public void receive(DatagramPacket) p):このソケットからデータパケットを受信します。
public byte[]getData():データバッファに戻ります。
public int getLength():送信または受信するデータの長さを返します。
public InetAddress get Addres():あるマシンのIPアドレスを返します。このデータはこのマシンに送信されます。あるいはこのマシンから受信されます。
【ケース】UDP受信側を作成します。
【受信側】
受信側:
一.UDPプロトコル送信データ:
(1)送信先socketオブジェクトの作成
(2)データを作成し、データを包装する
(3)socketオブジェクトの送信方法を呼び出してパケットを送信する
(4)資源の放出
UDP送信側に関する方法:
java.net類Datagram Socketjava.lang.Object java.net.DatagramSocketのような表現は、データパケットを送信および受信するためのソケットです。
java.net類Datagram Packetjava.lang.Object java.net.DatagramPacketなどはデータパケットを表します。
public void send(Datagram Packet) p):このソケットからパケットを送信します。Datagram Packet 含まれる情報は、送信するデータ、その長さ、リモートホストのIPアドレス、およびリモートホストのポート番号を示しています。
public DatagramPacket(byte[] buf,int length,InetAddress address、int port)パケットを作成し、長さをlengthとする。 指定されたホスト上の指定ポート番号にパケットを送信します。length パラメータがbuf.length以下でなければなりません。パラメータ: buf - データを包むlength - 長さを包むaddress - 宛先ポーター - 目的ポート番号
【ケース】UDP送信端を作成します。
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/*
* UDP :
* (1) socket
* (2)
* (3) socket
* (4)
* */
public class SendDemo {
public static void main(String[] args) throws IOException {
//(1) socket
// DatagramSocket(): 。
DatagramSocket ds = new DatagramSocket();
//(2)
// public DatagramPacket(byte[] buf,int length,InetAddress address,int port)
// 1-
byte[] bys = "hello UDP, ".getBytes();
// 2-
int len = bys.length;
// 3-IP
InetAddress address = InetAddress.getByName("192.168.80.1");
// 4-
int port = 10086;
DatagramPacket dp = new DatagramPacket(bys,len,address,port);
//(3) socket
ds.send(dp);
//(4)
ds.close();
}
}
二.UDPプロトコル受信データ:(1)送信先socketオブジェクトの作成(ポート指定が必要)
(2)パケットを作成する(受信容器)
(3)socketオブジェクトの受信方法を呼び出してデータを受信する
(4)データを解析し、コンソールに表示する
(5)資源の放出
UDP受信側に関する方法:
public DatagramSocket(int) port):データグラムソケットを作成し、ローカルホスト上の指定ポートにバインドする。
Datagram Packet(byte[] buf,int length):Datagram Packetを作成し、受信長はlengthである。 のパケットです
public void receive(DatagramPacket) p):このソケットからデータパケットを受信します。
public byte[]getData():データバッファに戻ります。
public int getLength():送信または受信するデータの長さを返します。
public InetAddress get Addres():あるマシンのIPアドレスを返します。このデータはこのマシンに送信されます。あるいはこのマシンから受信されます。
【ケース】UDP受信側を作成します。
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/*
* UDP :
(1) socket
(2) ( )
(3) socket
(4)
(5)
*/
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
// (1) socket
// public DatagramSocket(int port): 。
DatagramSocket ds = new DatagramSocket(10086);
// (2) ( )
// DatagramPacket(byte[] buf, int length): DatagramPacket,
// length 。
byte[] bys = new byte[1024];
int len = bys.length;
DatagramPacket dp = new DatagramPacket(bys, len);
// (3) socket
// public void receive(DatagramPacket p): 。
ds.receive(dp);
// (4)
// IP
// public InetAddress getAddress(): IP , 。
InetAddress address = dp.getAddress();
String ip = address.getHostAddress();
// public byte[] getData(): 。
// public int getLength(): 。
byte[] bys2 = dp.getData();
int len2 = dp.getLength();
String s = new String(bys2, 0, len2);
System.out.println(ip + ":" + s);
// (5)
ds.close();
}
}
コードの最適化:【受信側】
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
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("form " + ip + ":" + s);
//
ds.close();
}
}
【送信側】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 = "hello world".getBytes();
DatagramPacket dp = new DatagramPacket(bys, bys.length,
InetAddress.getByName("192.168.80.1"), 12345);
//
ds.send(dp);
//
ds.close();
}
}
【ケース】データはキーボードから入力され、ユーザーが入力した「886」が終了します。受信側:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
// socket
DatagramSocket ds = new DatagramSocket(12345);
while (true) {
//
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("form " + ip + ":" + s);
}
// ,
//
// ds.close();
}
}
送信先:import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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();
//
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while ((line = br.readLine()) != null) {
if ("886".equals(line)) {
break;
}
byte[] bys = line.getBytes();
DatagramPacket dp = new DatagramPacket(bys, bys.length, InetAddress.getByName("192.168.80.1"), 12345);
//
ds.send(dp);
}
//
ds.close();
}
}