UDP编程原理

来源:互联网 发布:电煮锅哪个牌子好 知乎 编辑:程序博客网 时间:2024/05/08 03:45

UDP

UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

UDP:主要学两个类:DatagramSocket DatagramPacket

DatagramSocket表示用来发送和接收数据报包的套接字,套接字就是两台机器之间通信的端点,数据报套接字是包投递服务的发送或接收点,就是寄快递和收快递的点。构造方法为:
          DatagramSocket(int port) :创建数据报套接字并将其绑定到本地主机上的指定端口。
DatagramPacket此类表示数据报包,数据报包用来实现无连接包投递服务。也就是包着东西的快递盒子。构造方法:
         DatagramPacket(byte[] buf, int length, SocketAddress address) :构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
         DatagramPacket(byte[] buf, int length, InetAddress address, int port) :构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。

  1. 客户端:
         1) 创建客户端 DatagramSocket 类 + 指定的发送端口
         2) 准备数据 以字节数组的形式
         3) 打包 DatagramPacket+服务器端的地址和端口
         4) 发送
         5) 释放资源
  2. 服务器端
         1) 创建服务端 DatagramSocket 类 + 指定的接收端口
         2) 准备接收数据的容器 以字节数组的形式封装为DatagramPacket
         3) 包 接收数据
         4) 分析
         5) 释放资源
import java.io.ByteArrayInputStream;import java.io.DataInputStream;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;/** *  2、服务器端 *   1) 创建服务端 DatagramSocket 类 + 指定的接收端口 *   2) 准备接收数据的容器 以字节数组的形式封装为DatagramPacket *   3) 包 接收数据 *   4) 分析 *   5) 释放资源 * @author Administrator * */public class MyServer {    public static void main(String[] args) throws IOException {        DatagramSocket sever = new DatagramSocket(8888);        byte[] b = new byte[1024];        DatagramPacket data = new DatagramPacket(b, b.length);        sever.receive(data);//      System.out.println(new String(b,0,b.length));        System.out.println(convert(b));        sever.close();          }    public static double convert(byte[] b) throws IOException{        ByteArrayInputStream s = new ByteArrayInputStream(b);        DataInputStream dis = new DataInputStream(s);        double num = dis.readDouble();        dis.close();        return num;    }}
import java.io.ByteArrayOutputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetSocketAddress;/** * 1、客户端: *  1) 创建客户端 DatagramSocket 类 + 指定的发送端口 *  2) 准备数据  以字节数组的形式 *  3) 打包 DatagramPacket+服务器端的地址和端口 *  4) 发送  *  5) 释放资源 * @author Administrator * */public class MyClient {    public static void main(String[] args) throws IOException {        DatagramSocket client = new DatagramSocket(6666);//      String msg = "lf is god!!";//      byte[] b = msg.getBytes();        double num = 88.88;        byte[] b = convert(num);        DatagramPacket data = new DatagramPacket(b, b.length, new InetSocketAddress("127.0.0.1",8888));        client.send(data);        client.close();    }    public static byte[] convert(double num) throws IOException{        ByteArrayOutputStream s = new ByteArrayOutputStream();        DataOutputStream dos = new DataOutputStream(s);        dos.writeDouble(num);        dos.flush();        byte[] b = s.toByteArray();        dos.close();        return b;    }}
原创粉丝点击