udp发送端代码:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; public class udp_send { public static void main(String[] args) throws IOException { method_2(); } private static void method_2() throws UnknownHostException, IOException { /*方法说明: *与udp_receive.java文件中的method_2()形成一对 *键盘录入,(回车)发送给接收端 *886结束发送! *while(true)实现循环发送 */ System.out.println("发送端active...."); //1,udpsocket服务。使用DatagramSocket对象。 DatagramSocket ds = new DatagramSocket(); BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); String line = null; while((line=bufr.readLine())!=null){ byte[] buf = line.getBytes(); DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName ("127.0.0.1"),10002); ds.send(dp); if("886".equals(line)) break; } ds.close(); } private static void method_0() throws UnknownHostException { /*方法说明: *获得本机IP地址字符串形式 *PC-201203181245 *127.0.0.1 */ InetAddress ip=InetAddress.getLocalHost(); System.out.println(ip.getHostName());//PC-201203181245 System.out.println(ip.getHostAddress());//127.0.0.1 } private static void method_1() throws IOException { /*方法说明: *1,建立udp的socket服务。 * 2,将要发送的数据封装到数据包中。 * 3,通过udp的socket服务将数据包发送出去。 * 4,关闭socket服务。 */ System.out.println("发送端active...."); //1,udpsocket服务。使用DatagramSocket对象。 DatagramSocket ds=new DatagramSocket() ; //2,将要发送的数据封装到数据包中。 String str = "你好!"; //使用DatagramPacket将数据封装到的该对象包中。 byte[] buf = str.getBytes(); DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName ("127.0.0.1"),10001); //3,通过udp的socket服务将数据包发送出去。使用send方法。 ds.send(dp); //4,关闭资源。 ds.close(); } }
udp接收端代码:
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class udp_receive { public static void main(String[] args) throws IOException { method_2(); } private static void method_2() throws IOException { /*方法说明: *与udp_send.java文件中的method_2()形成一对 *接收端一直读取发送端发过来的数据,不关闭 */ System.out.println("receive端启动......"); //1,建立udp socket服务。 DatagramSocket ds = new DatagramSocket(10002); while(true){ //2,创建数据包。 byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); //3,使用接收方法将数据存储到数据包中。 ds.receive(dp);//阻塞式的。与while(true)对立 //4,通过数据包对象的方法,解析其中的数据,比如,地址,端 口,数据内容。 String ip = dp.getAddress().getHostAddress(); int port = dp.getPort(); String text = new String(dp.getData(),0,dp.getLength()); System.out.println(ip+":"+port+":"+text); } } private static void method_1() throws IOException { System.out.println("receive端启动......"); /* * 建立UDP接收端的思路。 * 1,建立udp socket服务,因为是要接收数据,必须要侦听一个端 口号。 * 2,创建数据包,用于存储接收到的数据。方便用数据包对象的 方法解析这些数据. * 3,使用socket服务的receive方法将接收的数据存储到数据包中 。 * 4,通过数据包的方法解析数据包中的数据。 * 5,关闭资源 */ //1,建立udp socket服务。 DatagramSocket ds = new DatagramSocket(10001); //2,创建数据包。 byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); //3,使用接收方法将数据存储到数据包中。 ds.receive(dp);//阻塞式的。 //4,通过数据包对象的方法,解析其中的数据,比如,地址,端 口,数据内容。 String ip = dp.getAddress().getHostAddress(); int port = dp.getPort(); String text = new String(dp.getData(),0,dp.getLength());//只取有效 长度! System.out.println(ip+":"+port+":"+text); //5,关闭资源。 ds.close(); } }