UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!
UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。正因为UDP协议没有连接的过程,所以它的通信效率高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。
利用UDP协议的发送和接收,模拟聊天小程序
创建聊天程序的A端:
1、发送信息到接收端
1 、准备发送的信息【键盘录入】
2 、指定接受端的 ip
3 、指定接收端的端口
4 、打包【创建 DatagramPacket 的对象】
5 、发送【创建 DatagramSocket 的对象】
2、接收接收回复的信息
1 、准备接收使用字节数组
2 、把数组封装为数据报包【创建 DatagramPacket 的对象】
3 、接收数据
4 、解析报包有效数据
3 、上述操作循环操作
创建聊天程序的B端:
1、接收发送端的信息
1 、准备接收使用字节数组
2 、把数组封装为数据报包【创建 DatagramPacket 的对象】
3 、接收数据【创建 DatagramSocket 的对象】
4 、解析报包有效数据
2、回复发送端的信息
1 、准备发送的信息【键盘录入】
2 、指定发送的 ip 【解析接收的报包的 ip 即可】
3 、指定接收端的端口【解析接收的报包的端口即可】
4 、打包【创建 DatagramPacket 的对象】
5 、发送
3、上述操作循环操作
端口一:
package com.offcn.second; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner; public class MyQQ { public static void main(String[] args) throws Exception{ DatagramSocket ds = new DatagramSocket(); Scanner sc= new Scanner(System.in); while(true){ //发送消息 System.out.print("My:"); //输入发送信息 String smsg = sc.nextLine(); //byte[] sbs = smsg.getBytes(); //int slen = sbs.length; //创建数据包 DatagramPacket sdp = new DatagramPacket(smsg.getBytes(),//数据转为byte数组 smsg.getBytes().length,//数据长度 InetAddress.getLocalHost(),//接收端端口号 9999);//接收端,端口号 //发送 ds.send(sdp); //接收消息 //创建接收数据的数据包 DatagramPacket rdp = new DatagramPacket(new byte[1024],1024); //接收数据 ds.receive(rdp); //将接收的数据转为字符串 String rmsg = new String(rdp.getData(),0,rdp.getLength()); //打印输出 System.out.println("His:"+rmsg); } } }
端口二:
package com.offcn.second; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.util.Scanner; public class HisQQ { public static void main(String[] args) throws Exception{ DatagramSocket ds = new DatagramSocket(9999); Scanner sc = new Scanner(System.in); while(true){ //创建接收数据的数据包 DatagramPacket rdp = new DatagramPacket(new byte[1024],1024); ds.receive(rdp); //将接收的数据转换为字符串 String rmsg = new String(rdp.getData(),0,rdp.getLength()); //输出接收到的信息 System.out.println("His:"+rmsg); //给对方回消息 //输入发送的数据 System.out.print("My:"); String smsg = sc.nextLine(); //创建发送数据的数据包 DatagramPacket sdp = new DatagramPacket(smsg.getBytes(), smsg.getBytes().length, rdp.getAddress(), rdp.getPort()); ds.send(sdp); } } }
运行结果:
到此这篇关于java实现基于UDP协议的聊天小程序的文章就介绍到这了,更多相关java UDP聊天小程序内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!