Java UDP实现发送和接收(一个端口发送,一个端口接收)

您所在的位置:网站首页 java数据共享文件发送与接收 Java UDP实现发送和接收(一个端口发送,一个端口接收)

Java UDP实现发送和接收(一个端口发送,一个端口接收)

2023-08-04 09:00| 来源: 网络整理| 查看: 265

UDP是无连接的,发送方只管发,有没有人接都随他便

UDP靠DatagramSocket这个类实现通信。发送方创建这个类需要指定自己的port。 我们从控制台读入语句。 需要一个BufferedReader。 再用String类型去接收。 然后转换成字节数组。 最后传入DatagramPacket,这里需要四个参数,字节数组,数组起始位置,数组结束位置,InetSocketAddress(包括我们发到哪个IP去,发到该IP哪个端口)。 用DatagramSocket把这个DatagramPacket包发出去。

package com.cyz.chat; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.nio.charset.StandardCharsets; public class UdpSenderDemo01 { public static void main(String[] args) throws IOException { DatagramSocket datagramSocket = new DatagramSocket(9900); BufferedReader bufferedReader = null; String data = null; byte[] datas = null; DatagramPacket datagramPacket = null; while (true){ //准备数据 控制台读入 bufferedReader = new BufferedReader(new InputStreamReader(System.in)); data = bufferedReader.readLine(); datas = data.getBytes(StandardCharsets.UTF_8); datagramPacket = new DatagramPacket(datas, 0, datas.length,new InetSocketAddress("localhost", 9998)); datagramSocket.send(datagramPacket); if(data.trim().equals("bye")){ datagramSocket.close(); } } } } UDP是无连接的,接收方只管接,有没有人发都随他便

接收方也需要创建这个DatagramSocket类,指定自己的port(注意:发送方发到的端口必须和这个一致,不然就像现实生活寄信没有地址,寄不出去一样)。

准备一个byte[ ]字节数组和一个DatagramPacket包(把byte[ ]填到包里,用来初始化包)。

用DatagramSocket去接收DatagramPacket。(这里用阻塞式接收,不然接收不到)。

再准备一个byte[ ]字节数组,从DatagramPacket包里获取全部字节。这样就完成了数据的接收了。

把字节数组转成字符串就可以输出了。我这里设置了编码格式是UTF-8,保证发送和接收编码一致。

package com.cyz.chat; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.nio.charset.StandardCharsets; public class UdpReceiveDemo01 { public static void main(String[] args) throws IOException { DatagramSocket datagramSocket = new DatagramSocket(9998); while (true){ //准备接收 byte[] container = new byte[1024]; DatagramPacket datagramPacket = new DatagramPacket(container,0,container.length); datagramSocket.receive(datagramPacket);//阻塞式接收 //断开连接 byte[] datas = datagramPacket.getData(); String data = new String(datas, 0, datagramPacket.getLength(), StandardCharsets.UTF_8); if (data.trim().equals("bye")){ break; }else{ System.out.println(data); } } datagramSocket.close(); } }

输入“bye”就可以退出啦!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3