UDP实例一:
package com.nbchina.net; import java.net.DatagramPacket; import java.net.DatagramSocket; public class UdpRece { public static void main(String[] args) throws Exception{ //1、创建udp服务。通过DatagramSocket对象。监听10000端口 DatagramSocket ds = new DatagramSocket(10000); //2、确定数据,用户储存数据 byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); //3、通过socket服务,receive方法将收到的数据存入数据包中 ds.receive(dp); //4.通过数据包的方法获取其中所要数据 String ip=dp.getAddress().getHostAddress(); String data = new String(dp.getData(),0,dp.getLength()); int port = dp.getPort(); System.out.println(ip+"::"+data+"::"+port); ds.close(); } } package com.nbchina.net; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UdpSend { public static void main(String[] args) throws Exception{ //1、创建udp服务。通过DatagramSocket对象。端口不填,随机。填写,则发送端口确定 DatagramSocket ds = new DatagramSocket(8888); //2、确定数据,并封装成数据包DatagramPacket(byte[] buf,int length,InetAddress address,int port) byte[] buf = "udp data send...".getBytes(); DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.8"),10000); //3、通过socket服务,将已有数据发送出去 ds.send(dp); //4、关闭资源 ds.close(); } }
package com.nbchina.net2; import java.net.DatagramPacket; import java.net.DatagramSocket; public class UdpRece { public static void main(String[] args) throws Exception{ //1、创建udp服务。通过DatagramSocket对象。监听10000端口 DatagramSocket ds = new DatagramSocket(10000); int i=1; while(true){ byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); //3、通过socket服务,receive方法将收到的数据存入数据包中 //receive阻塞住程序运行。 ds.receive(dp); //4.通过数据包的方法获取其中所要数据 String ip=dp.getAddress().getHostAddress(); String data = new String(dp.getData(),0,dp.getLength()); int port = dp.getPort(); System.out.println("["+i+"]"+ip+":"+port+"--"+data); i++; } //2、确定数据,用户储存数据 //ds.close(); } } package com.nbchina.net2; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UdpSend { public static void main(String[] args) throws Exception{ //1、创建udp服务。通过DatagramSocket对象。端口不填,随机。填写,则发送端口确定 DatagramSocket ds = new DatagramSocket(8888); BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); String line = null; while((line=bufr.readLine())!=null){ if("886".equals(line)) break; byte[] buf = line.getBytes(); DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.8"),10000); ds.send(dp); } ds.close(); } }
UDP实例三----多线程聊天室
package com.nbchina.chat; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class UdpChat { public static void main(String[] args) throws Exception{ DatagramSocket ss = new DatagramSocket(9999); DatagramSocket rs = new DatagramSocket(10003); new Thread(new Send(ss)).start(); new Thread(new Rece(rs)).start(); } } class Send implements Runnable{ private DatagramSocket ds; public Send(DatagramSocket ds){ this.ds = ds; } public void run() { try{ BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); String line = null; while((line=bufr.readLine())!=null){ if("886".equals(line)) break; byte[] buf = line.getBytes(); DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.8"),10003); ds.send(dp); } }catch(Exception e){ throw new RuntimeException("发送端异常"); } } } class Rece implements Runnable{ private DatagramSocket ds; public Rece(DatagramSocket ds){ this.ds = ds; } public void run() { try{ int i=1; while(true){ byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); ds.receive(dp); String ip=dp.getAddress().getHostAddress(); String data = new String(dp.getData(),0,dp.getLength()); int port = dp.getPort(); System.out.println("["+i+"]"+ip+":"+port+"--"+data); i++; } }catch(Exception e){ throw new RuntimeException("发送端异常"); } } }