UDP编程原理

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值