基于UDP的通信的创建

这篇具有很好参考价值的文章主要介绍了基于UDP的通信的创建。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

        在最初的编程过程中,多半是编写完代码,运行,然后在控制台输出或在电脑中以文件的形式输出,本篇就是可以将文本跨局域网输出的简单介绍。


一、网络编程三要素

        目前网络编程分为CS架构和BS架构。

        CS架构就是以客户端的形式与服务端进行交互,用户一般需要在本地下载客户端进行使用。我们所熟知的QQ微信或者是一些游戏都是CS架构。

        BS架构则是直接通过浏览器与服务端进行进行交互,不需要用户下载客户端,只需要用户有浏览器即可。

        网络编程三要素分别是IP,端口,协议。

    1.IP地址

        表示设备在网络中的地址,是网络中设备的唯一标识。IP地址分为IPV4和IPV6,若想要查询自己电脑目前使用的IP地址,可以直接在命令行窗口输入ipconfig来查看。

    2.端口号

        应用程序在设备中唯一的标识,在计算机中有很多的端口,使用程序时都需要占用一个端口,端口分为以下几类:

  • 周知端口:0~1023,被预先定义的知名应用程序占用(如:HTTP占用80,FTP占用21)

  • 注册端口:1024~49151,分配给用户经常或者某些应用程序

  • 动态端口:49152~65536,之所以称为动态端口,是因为它一般不固定分配给某进程,而是动态分配的。      

    3.协议

        连接和数据在网络中传输的规则。为了让网络中的设备进行通信,实现指定的规则就是协议。

二、UDP协议

        UDP协议时面向无连接的,不需要确认双方是否哦存在,就可以开始传输,类似直播,不需要确认是否有多少观众在看,只管往外播出。

        在Java中提供了一个DatagramSocket类来完成基于UDP协议的收发数据。数据要以数据包的形式进行收发,,一个数据包时限制在64KB以内的。

1.简单的创建服务端和客户端

        服务端的代码如下:

public class Server {
    public static void main(String[] args) throws Exception {
        //创建一个DatagramSocket作为服务端,许哟啊传入端口号,需要与客户端端口一致.
        DatagramSocket ds = new DatagramSocket(10000);

        //创建一个byte数组用于接受数据
        byte[] data=new byte[1024];

        //创建DatagramPacket,需要传入byte数组用于接收参数,和数组长度
        DatagramPacket dp=new DatagramPacket(data,1024);
        ds.receive(dp);

        //接受数据的长度
        int length = dp.getLength();

        //就收的数据
        byte[] data1 = dp.getData();

        //将接收到的数据存入String中,String会自动转化为子字符串,输出即可.
        //需要传入接收到的byte数组,从0索引开始,一共截取length长度的数据
        String read = new String(data1, 0, length);
        System.out.println(read);

        //释放资源
        ds.close();
    }
}

        客户端的代码如下:

public class Client {
    public static void main(String[] args) throws Exception {
        //往外发数据,需要先创建一个DatagramSocket对象.
        DatagramSocket ds = new DatagramSocket();

        //需要发送的数据,转化为byte数组
        byte[] bytes = "你好".getBytes();

        //创建数据包,将要发出的数据包装成对象需要传输四个参数
        //byte数组,数组长度,需要发送到的IP地址(需要传入InetAddress类型值),端口号
        DatagramPacket dp = new DatagramPacket(
                bytes,
                bytes.length,
                //127.0.0.1是指向自己电脑的
                InetAddress.getByName("127.0.0.1"),
                10000);

        //发送数据
        ds.send(dp);
        System.out.println("数据发送完毕");

        //释放资源
        ds.close();
    }
}

        运行结果如下:

基于UDP的通信的创建,java

        这样一个简单发送数据就创建好了,需要说明的是需要先启动接收端再启动发送端。

        但因为程序一般不会再发送依次数据就停止,而是不断收,不断发送,,并且需要用户键盘输入,所以可以对程序进行优化。

2.优化代码

        客户端代码如下:

public class Client {
    public static void main(String[] args)  {
        //创建键盘录入
        Scanner scanner=new Scanner(System.in);
        //因为会有异常,所以需要抓一下异常
        try (
                //往外发数据,需要先创建一个DatagramSocket对象.
                DatagramSocket ds = new DatagramSocket();
                ){
            //只需要创建死循环,即可实现不断发送消息
            while (true) {
                //需要发送的数据修改为需要键盘录入,兵器直接转化为byte数组
                byte[] bytes = scanner.next().getBytes();
                //创建数据包,将要发出的数据包装成对象需要传输四个参数
                //byte数组,数组长度,需要发送到的IP地址(需要传入InetAddress类型值),端口号
                DatagramPacket dp = new DatagramPacket(
                        bytes,
                        bytes.length,
                        //127.0.0.1是指向自己电脑的
                        InetAddress.getByName("127.0.0.1"),
                        10000);
                //发送数据
                ds.send(dp);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

        服务器端代码如下:

public class Server {
    public static void main(String[] args){
        //抓异常
        try (
                //创建一个DatagramSocket作为服务端,许哟啊传入端口号,需要与客户端端口一致.
                DatagramSocket ds = new DatagramSocket(10000);
                ){

                //创建一个byte数组用于接受数据
                byte[] data=new byte[1024];
                //创建DatagramPacket,需要传入byte数组用于接收参数,和数组长度
                DatagramPacket dp=new DatagramPacket(data,1024);
            //创建死循环
            while (true) {

                ds.receive(dp);
                //接受数据的长度
                int length = dp.getLength();
                //就收的数据
                byte[] data1 = dp.getData();
                //将接收到的数据存入String中,String会自动转化为子字符串,输出即可.
                //需要传入接收到的byte数组,从0索引开始,一共截取length长度的数据
                String read = new String(data1, 0, length);
                System.out.println(read);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

        这样就会再输入的情况下才能并回车发送才可以进行发送,只要不停止程序,是可以一直进行发送的。

基于UDP的通信的创建,java

        在进行传输时,IP号是可以更改的只要将IP号更改为另一台电脑的IP地址即可,只要端口号一致,,接收端打开,发送端即可发送数据,但仅限于局域网内。


总结

        本文讲述了基于UDP的通信的简单创建过程,之后会结合多线程技术,将代码进行进一步优化。文章来源地址https://www.toymoban.com/news/detail-816653.html

到了这里,关于基于UDP的通信的创建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于FPGA的UDP 通信(二)

    前文链接:基于FPGA的UDP 通信(一) 本文继续介绍与以太网数据协议相关的内容。 IEEE802.3标准规定了,以太网数据传输的格式: 字段解释: 字段名称 字段长度/(字节) 含义 前导码 7 用于数据帧同步;发送7个字节的 8\\\'h55 帧开始符( SFD) 1 标明下一个字节为目的 MAC 字段;

    2024年01月19日
    浏览(30)
  • 【Java】实现UDP通信

    🎈博客主页:🌈我的主页🌈 🎈欢迎点赞 👍 收藏 🌟留言 📝 欢迎讨论!👏 🎈本文由 【泠青沼~】 原创,首发于 CSDN🚩🚩🚩 🎈由于博主是在学小白一枚,难免会有错误,有任何问题欢迎评论区留言指出,感激不尽!🌠个人主页 TCP —传输控制协议,提供的是面向连接、

    2024年02月07日
    浏览(24)
  • JAVA中的UDP通信

    概念: 用户数据报传输协议 特点: 传输数据量小(64K),不一定传输成功,没有明确的客户端与服务端的概念,数据不会通过输入输出流传输,而是会通过打包成数据报,,再传输入通道 DatagramSocket 一 、构造方法 (1)DatagramSocket() 绑定到本地地址和一个随机的端口号 (2)

    2024年02月13日
    浏览(23)
  • 【Java 基础篇】Java UDP通信详解

    UDP(User Datagram Protocol)是一种无连接的网络传输协议,它不像TCP那样需要建立连接和维护状态,因此更加轻量级。UDP适用于那些对数据传输的实时性要求较高,可以容忍一定数据丢失的场景。本文将详细介绍Java中如何使用UDP协议进行网络通信,包括UDP套接字、数据传输、服

    2024年02月04日
    浏览(23)
  • 【JavaEE】_基于UDP实现网络通信

    目录 1. 服务器 1.1 实现逻辑 1.2 代码 1.3 部分代码解释 2. 客户端 2.1 实现逻辑 2.2 代码 2.3 客户端部分代码解释 3. 程序运行结果 4. 服务器客户端交互逻辑 普通服务器:收到请求,根据请求计算响应,返回响应; 回显服务器:忽略计算,直接将收到的请求作为响应返回; (

    2024年01月21日
    浏览(25)
  • 基于Matlab的UDP通信(浪高仪)实录

    由于最近需要使用一个利用UDP网口进行传输数据的浪高仪,且它需要基于Matlab平台与程序进行数据融合,这里同时接触到一些新的数据编译工作。在这里简单记录一下开发该程序的全过程。 目录 一、UDP协议介绍 二、通讯代码 三、数据编译代码 四、采用网络调试助手辅助验

    2024年02月05日
    浏览(20)
  • 基于UDP/TCP的网络通信编程实现

    红色是心中永不褪色的赤诚 操作系统为网络编程提供了 Socket api , Socket是基于TCP/IP协议的网络通信的基本单元, 基于Socket的网络程序开发就是 网络编程. 由于直接与应用层联系的是传输层, 所以针对应用层协议(TCP, UDP), Shocket提供了三种套接字, 分别是 流套接字(使用TCP) , 数据报

    2024年02月08日
    浏览(38)
  • 基于python socket实现TCP/UDP通信

    两个应用程序如果需要进行通讯最基本的一个前提就是能够唯一的标示一个进程,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。能够唯一标示网络中的进程后

    2024年02月16日
    浏览(38)
  • java实现UDP及TCP通信

    简介 UDP (User Datagram Protocol)用户数据报协议, TCP (Transmission Control Protocol) 传输控制协议,是传输层的两个重要协议。 UDP是一种 无连接、不可靠 传输的协议。其将数据源IP、目的地IP和端口封装成数据包,不需要建立连接,每个数据包的大小限制在64KB内;发送不管对方是否准

    2024年02月03日
    浏览(32)
  • Java UDP通信详解:单播、广播、组播

    1.UDP是一种无连接、不可靠传输的协议; 2.将数据源IP、目的地IP和端口封装成数据包,不需要建立连接 ; 3.每个数据包的大小限制在64KB内; 4.发送不管对方是否准备好,接收方收到也不确认,故是不可靠的; 5.可以广播发送 ,发送数据结束时无需释放资源,开销小,速度快

    2024年02月02日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包