/**
* udp是面向无连接的,先运行哪端都可以!
* 为了能看到数据,先运行接收端UdpReceive
*/
import java.net.*;
public class UdpReceive {
public static void main(String[] args) throws Exception {
DatagramSocket ds = new DatagramSocket(8888);
while (true) {
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, 0, buf.length);
ds.receive(dp); // 阻塞式方法,没数据就一直等待...
// 从数据包中获取数据
String ip = dp.getAddress().getHostAddress();
int port = dp.getPort();
String data = new String(dp.getData(), 0, dp.getLength());
System.out.println("ip = " + ip);
System.out.println("port = " + port);
System.out.println("data = " + data);
System.out.println("------------------------");
}
// ds.close();
}
}
import java.io.*;
import java.net.*;
public class UdpSend {
public static void main(String[] args) throws Exception {
// 创建udp服务
DatagramSocket ds = new DatagramSocket(9999); //给发送端指定一个标识--端口号
// 确定数据并封装成数据包
// byte[] data = "hello world".getBytes();
//使用键盘录入数据
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = "";
while((line = br.readLine()) != null){
byte[] data = line.getBytes();
DatagramPacket dp = new DatagramPacket(data, data.length,
InetAddress.getByName("127.0.0.1"), 8888);
// 通过socket服务,将已有的数据包发送出去,通过send方法
ds.send(dp);
if("886".equals(line)){
break;
}
}
// 关闭资源
ds.close();
}
}