zoukankan      html  css  js  c++  java
  • 简单了解java UDP编程

    1.UDP协议的简单描述

      UDP是基于运输层的一个无连接协议,不提供数据包分组,排序,封装管理,将数据包发送出去后对其是否到达就已经不关心了。

    所以UDP的优缺点很容易归纳。因为UDP不会对数据包进行分组,排序等操作,就少了许多像TCP协议一般的控制方式(拥塞控制,三

    次握手四次挥手的连接与释放,重传等),少了TCP这些繁琐的控制传送的方式,UDP的优点就体现了出来,那就是迅速。缺点也就是

    传送不可靠了。

    2.java中UDP协议的使用描述

      java使用UDP协议是很简单的,根据UDP的特性可以知道,不用创建连接,所以只要通过普通的socket就能发送packet了。简单介绍

    一下java使用UDP的类。

      1.DatagramSocket这个类就是java通过UDP协议来创建的Socket。(贴上几个常用的构造方法意思一哈╮(╯▽╰)╭)

         DatagramSocket();无参构造方法

         DatagramSocket( int port);带端口号的构造方法

         DatagramSocket(int port, InetAddress laddr);带端口也带上地址的构造方法

      2.DatagramPacket这个类就是定义发送或者是接收的数据包了。(也贴一些构造方法)

         DatagramPacket(byte[] buf, int length);说明了传送时是一byte来传送的喔

         DatagramPacket(byte[] buf,int offset,int length,InetAddress address,int port);这个一般是用来发送的,毕竟要知道对方的端口号嘛。

        (其他的构造方法就不贴上来了╮(╯▽╰)╭)

      3.Socket的实例也是有一些常用的方法

       socket.send(packet);发送数据包

       socket.receive(packet);接收数据包(没有数据包接收这个线程就一直等待,就停在这)

       socket.close();这个相信都懂哦(关闭这个套接字)

      4.好了该讲的都讲得差不多了(上一张UDP传送的图好了,图是引用其他大神的_φ(❐_❐✧ )

      

      5.上传个代码好了

         这个模拟客户端的

     1 package com.udp.test;
     2 import java.io.IOException;
     3 import java.net.DatagramPacket;
     4 import java.net.DatagramSocket;
     5 import java.net.InetAddress;
     6 public class client {
     7     //main
     8     public static void main(String []args) throws IOException {
     9         //定义一个UDPsocket
    10         DatagramSocket socket = new DatagramSocket(7410);
    11         //定义发送数据
    12         String str_data = "我想吃饭。";
    13         byte data[] = str_data.getBytes();
    14         //定义发送地址
    15         InetAddress address = InetAddress.getLocalHost();
    16         //定义发送包
    17         DatagramPacket packet = new DatagramPacket(data, 0, data.length, address, 8520);
    18         //发送
    19         socket.send(packet);
    20         //等待服务端回复
    21         byte data2[] = new byte[1024];
    22         DatagramPacket packet2 = new DatagramPacket(data2, 0, data2.length);
    23         socket.receive(packet2);
    24         //输出接收内容
    25         String string = new String(data2, 0, packet2.getLength());
    26         System.out.println("这里是客户端,服务端说:"+string);
    27         //关闭客户端
    28         socket.close();
    29     }
    30 }

         这个是模拟服务端

     1 package com.udp.test;
     2 import java.io.IOException;
     3 import java.net.DatagramPacket;
     4 import java.net.DatagramSocket;
     5 public class server {
     6     //main
     7     public static void main(String []args) throws IOException {
     8         //定义端口号
     9         DatagramSocket socket = new DatagramSocket(8520);
    10         //定义接收数据
    11         byte data[] = new byte[1024];
    12         //定义接收包
    13         DatagramPacket packet = new DatagramPacket(data, 0, data.length);
    14         //等待接收
    15         socket.receive(packet);
    16         //返回接收结果
    17         String string = new String(data, 0 , packet.getLength());
    18         System.out.println("这里是服务端,客户端说:"+string);
    19         //创建回复数据
    20         String str_data = "收到啦";
    21         byte data2[] = str_data.getBytes();
    22         //创建回复包
    23         packet.getAddress();
    24         DatagramPacket packet2 = new DatagramPacket(data2, 0, data2.length, packet.getAddress(), packet.getPort());
    25         //发起回复
    26         socket.send(packet2);
    27         //关闭连接
    28         socket.close();
    29     }
    30 }
  • 相关阅读:
    鼠标经过显示边框
    特殊字符
    HTML 列表
    embed 引入网上视频
    锚点定位
    盒子阴影
    Map的四种遍历方式
    Glide的 java.lang.RuntimeException: Expected instanceof GlideModule, but found:X.GlideModule@2e4554f
    Java标识符的命名规则
    django入门与实践
  • 原文地址:https://www.cnblogs.com/feizhai/p/8666966.html
Copyright © 2011-2022 走看看