java实现基于UDP协议的聊天小程序操作

 更新时间:2021年10月25日 11:35:18   作者:皇正经  
UDP是与TCP相对应的协议,UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。正因为UDP协议没有连接的过程,所以它的通信效率高;但也正因为如此,它的可靠性不如TCP协议高,本文给大家介绍java实现基于UDP协议的聊天小程序操作,感兴趣的朋友一起看看吧

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聊天小程序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mybatis中association标签的使用解读

    mybatis中association标签的使用解读

    这篇文章主要介绍了mybatis中association标签的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Mapper.xml中查询返回带有List属性的实体类结果问题

    Mapper.xml中查询返回带有List属性的实体类结果问题

    这篇文章主要介绍了Mapper.xml中查询返回带有List属性的实体类结果问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Java 多线程的同步代码块详解

    Java 多线程的同步代码块详解

    这篇文章主要介绍了Java 多线程的同步代码块,使用synchronized关键字创建线程同步方法是实现线程同步的关键,需要的朋友可以参考下
    2021-10-10
  • 如何通过Java打印Word文档

    如何通过Java打印Word文档

    这篇文章主要介绍了如何通过Java打印Word文档,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 实例代码讲解JAVA多线程

    实例代码讲解JAVA多线程

    这篇文章主要介绍讲解JAVA多线程的有关知识,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下
    2020-06-06
  • Java多态成员访问的特点是什么?

    Java多态成员访问的特点是什么?

    在上一篇文章中介绍了方法重载和方法重写的区别,但是在多态情况下发现程序的执行结果和我们预期的不太一样,这篇将继续介绍多态场景下,Java成员访问的特点,需要的朋友可以参考下
    2021-06-06
  • 解决java读取EXCEL数据变成科学计数法的问题

    解决java读取EXCEL数据变成科学计数法的问题

    这篇文章主要介绍了解决java读取EXCEL数据变成科学计数法的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Java线程池Executor用法详解

    Java线程池Executor用法详解

    本文主要为大家详细介绍了Java线程池Executor的用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • SpringBoot从繁至简的框架基础教程

    SpringBoot从繁至简的框架基础教程

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置
    2022-10-10
  • Java多线程环境下死锁模拟

    Java多线程环境下死锁模拟

    这篇文章主要介绍了模拟Java多线程环境下的死锁,文章介绍一些死锁的产生条件的相关资料,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你有所帮助
    2021-12-12

最新评论