简单了解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 }

 

posted @ 2018-03-28 22:53  肥仔中意编程  阅读(263)  评论(0编辑  收藏  举报