网络编程(2)—UDP

1.UDP协议:

  • 将数据、源、目的封装成数据包,不需要建立连接
  • 每个数据包大小在64K一下
  • 因无需建立连接,所以是不可靠的
  • 发送完毕,无需释放资源,速度快

2.UDP编程步骤:

  • 发送端:
  • 1.创建发送端对象(new DatagramSocket())
  • 2.准备要发送的数据,创建一个字符串转化为字节数组
  • 3.创建数据报对象(DatagramPacket pack = new DatagramPacket(b,0,b.length,
  • InetAddress.getByName(“127.0.0.1”),9090);)
  • 4.发送端对象.调用send()函数发送数据报
  • 5.关闭连接资源
  • 接收端:
  • 1.创建接收端对象(DatagramSocket(9090))
  • 2.同样的创建一个数据报(new DatagramPacket(b ,0 ,b.length))
  • 3.接收端对象.调用receive()函数,使用数据报接受数据
  • 4.写入到字符串中
  • 5.输出字符串
  • 6.关闭连接资源

3.实例:

public class TestUDP {

    //发送端
    @Test
    public void send(){
        //1.UDPSoclet对象
        DatagramSocket ds = null;
        try {
            ds = new DatagramSocket();
            //2.要发送的数据
            byte[] b = "我是要发送的数据".getBytes();
            //3.创建数据报:每个数据报不能大于64K,其中记录着数据信息、发送端的IP、端口号以及接受端的IP和端口号
            DatagramPacket pack = new DatagramPacket(b,0,b.length,
                    InetAddress.getByName("127.0.0.1"),9090);
            //4.发送
            ds.send(pack);
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(ds != null){
                //关闭资源
                ds.close();
            }
        }
    }
    //接收端
    @Test
    public void receive(){
        //1.接收端对象
        DatagramSocket ds = null;
        try {
            ds = new DatagramSocket(9090);
            byte[] b = new byte[1024];
            //2.通过数据报接受数据
            DatagramPacket pack = new DatagramPacket(b ,0 ,b.length);
            //3.接收
            ds.receive(pack);
            //4.写入到字符串中
            String str = new String(pack.getData(), 0, pack.getLength());
            //5.输出字符串
            System.out.println(str);
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(ds != null){
                //关闭资源
                ds.close();
            }
        }
    }
}
posted @ 2017-06-30 09:16  滕鹏飞  阅读(110)  评论(0编辑  收藏  举报