开启接收端UdpRece,将 UdpSend.java 文件拷贝到c盘根目录下,在文件中去除包名,在命令行下运行:
C:\Users\lei>cd c:\
c:\>javac UdpSend.java
c:\>java UdpSend
直接上代码:
可以将发送端的代码,改为通过广播地址来发送,达到群聊的目的。例如我的机器IP地址为:10.5.83.140。子网掩码为:255.255.255.128
则对应的主机地址为从10.5.83.129到10.5.83.254.广播地址为,主机位全部标识位1.则广播地址为,10.5.83.255
DatagramPacket dp=new DatagramPacket(data,data.length,InetAddress.getByName("10.5.83.255"),10000);
package udpDemo; 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; /*通过udp传输方式,发送一段文字 * 思路: * 1.建立udpsocket服务 * 2.提供数据,并将数据封装到数据包中 * 3.通过socket服务的发送功能将数据包发送出去 * 4. 关闭资源 * */ public class UdpSend { public static void main(String[] args) throws IOException { //1.建立udpsocket服务 DatagramSocket ds=new DatagramSocket(8888);// 从某个固定的端口发出 boolean flag=true; //2.提供数据,并将数据封装到数据包中 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); while(flag) { System.out.println("请输入文字:"); String line=br.readLine(); byte []data=line.getBytes(); DatagramPacket dp=new DatagramPacket(data,data.length,InetAddress.getByName("localhost"),10000); // 3.通过socket服务的发送功能将数据包发送出去 ds.send(dp); } //4.关闭资源 ds.close(); } }
package udpDemo; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; /*需求: * 定义一个应用程序,用于接受并处理数据 * 1.定义udp的socket服务通常会监听一个特定的端口,方便于明确哪些数据过来。由该应用程序处理 * 2. 定义一个数据包,因为要存储接受到字节数据。 * 因为数据包对象中有更多功能可以提取字节数据中的不同数据信息 * 3.通过socket服务的recevie方法将收到的数据存储到一已定义好的数据包中 * 4.通过数据包中的特有功能,将不同的数据提取出来,并打印到控制台上。 * 5.关闭资源 * */ public class UdpRece { public static void main(String[] args) throws IOException { //1.定义udp的socket服务,通常会监听一个特定的端口 DatagramSocket ds=new DatagramSocket(10000); // * 2. 定义一个数据包,因为要存储接受到字节数据。 byte []buf=new byte[1024]; DatagramPacket dp=new DatagramPacket(buf,0,buf.length); boolean flag=true; while(flag){ //3.通过socket服务的recevie方法将收到的数据存储到一已定义好的数据包中 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:"+ip+",端口:"+port+",数据:"+data); } //5.关闭资源 ds.close(); } }