UDP编程
发送端:
1、创建DatagramSocket对象socket。
2、创建数据报包DatagramPacket对象packet。(指定发送的数据内容,目标地址和端口)
3、发送数据。(socket.send(packet))
4、释放资源。(socket.close())
接收端:
1、创建DatagramSocket对象socket。(指定接收端口)
2、创建数据报包DatagramPacket对象packet,传入接收数据的数组。
3、接收数据。(socket.receive(packet))
4、释放资源。(socket.close())
实例一:语法示例
发送端:
//创建Socket对象
DatagramSocket ds = new DatagramSocket();
//创建数据报包
byte[] buf = "Hello World".getBytes();
int length = buf.length;
InetAddress address = InetAddress.getByName("Arica");
int port = 2223;
DatagramPacket dp = new DatagramPacket(buf, length, address, port);
//发送数据
ds.send(dp);
//释放资源
ds.close();
接收端:
/创建Socket对象,指定接收端口
DatagramSocket ds = new DatagramSocket(2223);
//创建数据报包
byte[] buf = new byte[1024 * 64];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
//接收数据
ds.receive(dp);
//释放资源
ds.close();
//接收数据
InetAddress address = dp.getAddress();
byte[] data = dp.getData();
int length = dp.getLength();
int port = dp.getPort();
//打印到控制台
System.out.println("form : " + address + ":" + port + ": data : " + new String(data,0,length));
实例二:键盘输入
发送端:
// 创建Socket对象
DatagramSocket ds = new DatagramSocket();
// 创建扫描器对象
Scanner scan = new Scanner(System.in);
while (true) {
String data = scan.nextLine();
if ("886".equals(data)) {
break;
} else {
// 创建数据报包
byte[] buf = data.getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("Arica"), 2224);
// 发送数据
ds.send(dp);
}
}
// 释放资源
ds.close();
接收端:
// 创建Socket对象,指定接收端口
DatagramSocket ds = new DatagramSocket(2224);
// 创建数据报包
byte[] buf = new byte[1024 * 64];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
while (true) {
ds.receive(dp);
byte[] data = dp.getData();
System.out.println("form : " + dp.getAddress().getHostName() + ": 2224 " + ": data : "
+ new String(data, 0, data.length));
}
实例三:聊天模拟
chat端:
importjava.net.DatagramSocket;
public class Chat {
public static void main(String[] args) throws Exception {
Receive r = new Receive(new DatagramSocket(2225));
Send s = new Send(new DatagramSocket());
new Thread(r).start();
new Thread(s).start();
}
}
发送端:
import java.io.IOException;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
importjava.net.InetAddress;
importjava.net.UnknownHostException;
import java.util.Scanner;
public class Send implements Runnable {
DatagramSocket ds ;
public Send(DatagramSocket ds) {
super();
this.ds = ds;
}
@Override
public void run() {
// 创建扫描器对象
Scanner scan = new Scanner(System.in);
while (true) {
String data = scan.next();
if ("886".equals(data)) {
break;
} else {
// 创建数据报包
byte[] buf = data.getBytes();
DatagramPacket dp;
try {
dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("127.0.0.1"), 2225);
ds.send(dp);
} catch (UnknownHostException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 释放资源
ds.close();
}
}
接收端:
import java.io.IOException;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
public class Receive implements Runnable {
DatagramSocket ds;
public Receive(DatagramSocket ds) {
this.ds = ds;
}
@Override
public void run() {
// 创建数据报包
while (true) {
byte[] buf = new byte[1024 * 64];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
try {
this.ds.receive(dp);
} catch (IOException e) {
e.printStackTrace();
}
byte[] data = dp.getData();
System.out.println("form : " + dp.getAddress().getHostName() + ": 2225 " + ": data : "
+ new String(data, 0, data.length));
}
}
}