1 import java.io.IOException; 2 import java.net.DatagramPacket; 3 import java.net.DatagramSocket; 4 import java.net.InetAddress; 5 6 public class TimeClient_UDP{ 7 public static void main(String args[]) throws IOException{ 8 String host = "localhost"; 9 byte[] msg = new byte[256];//存放收发数据 10 InetAddress addr = InetAddress.getByName(host);//获取主机地址 11 System.out.println("侦听主机为:"+addr); 12 DatagramPacket packet = new DatagramPacket(msg,msg.length,addr,3000);//创建要收发的数据报 13 DatagramSocket socket = new DatagramSocket();//创建用于通信的Socket对象 14 socket.send(packet);//发送数据报 15 packet = new DatagramPacket(msg,msg.length);//创建接收的数据报 16 socket.receive(packet);//接收数据报,存放到packet中 17 String time = new String(packet.getData());//获取数据报中的数据内容 18 System.out.println("侦听主机:"+host+"的当前日期为:"+time); 19 socket.close();//释放Socket 20 } 21 }
1 import java.io.IOException; 2 import java.net.DatagramPacket; 3 import java.net.DatagramSocket; 4 import java.net.InetAddress; 5 import java.util.Date; 6 public class TimeServer_UDP{ 7 public static void main(String args[]) throws IOException{ 8 DatagramSocket socket = new DatagramSocket(3000);//Socket对象.端口3000 9 System.out.println("等待接收数据......"); 10 while(true){ 11 byte buf[] = new byte[256]; 12 DatagramPacket packet = new DatagramPacket(buf,buf.length); 13 socket.receive(packet); 14 15 InetAddress addr = packet.getAddress(); 16 int port = packet.getPort(); 17 System.out.println("已接收来自" + addr.toString() + ":"+port+"的数据"); 18 19 String date = new Date().toString(); 20 buf = date.getBytes(); 21 packet = new DatagramPacket(buf,buf.length,addr,port); 22 socket.send(packet); 23 } 24 } 25 }
DatagramSocket客户端java project工程目录为E:\EclipseProject\TimeClient_UDP。
DatagramSocket服务端java project工程目录为E:\EclipseProject\TimeServer_UDP。
在Windows系统的dos命令行cmd中运行的步骤:
1、配置系统环境变量
JAVA_HOME(添加存放jdk的目录) C:\Program Files\Java\jdk1.8.0_65
Path(添加jdk目录下的bin子目录) %JAVA_HOME%\bin
classpath(添加jdk目录下的lib子目录里需要的包) .;%JAVA_HOME%\jre\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
2、打开两个dos窗口,分别进入DatagramSocket客户端与服务端的工程目录(上述目录)
3、将源码通过javac 工程名,编译出.class文件;再java 工程名,运行
4、步骤2,3详见图1DatagramSocket客户端运行效果;图2DatagramSocket服务端运行效果。