UDP编程

一   实现过程

udp协议:以数据为中心,非面向连接,不安全,数据可能丢失,效率高

1 客户端

 1)创建客户端DatagramSocket

 2)准备数据 字节数组

 3)打包 DatagramPacket+服务器地址及端口

4)发送

5)释放资源

2 服务端

 1)创建服务端DatagramSocket+指定端口

 2)准备接受容器 字节数组 封装DatagramPacket

 3)接受数据

4)分析

5)释放资源

二 源码

client:

package com.lzs.net;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

/**
 * Created by zaish on 2016-3-20.
 */
public class MyUDPClient {
    public static void main(String[] args) throws IOException {
        // 1)创建客户端DatagramSocket
        DatagramSocket client=new DatagramSocket(6666);
        //2)准备数据 字节数组
        double msg=89.12;
        byte[] data=convert(msg);
        //3)打包 DatagramPacket+服务器地址及端口
        DatagramPacket dp=new DatagramPacket(data,data.length,new InetSocketAddress("localhost",8888));
        //4)发送
        client.send(dp);
        //5)释放资源
        client.close();

    }
    public static byte[] convert(double d) throws IOException {
        byte[] data=null;
        ByteArrayOutputStream bos=new ByteArrayOutputStream();
        DataOutputStream dos=new DataOutputStream(bos);
        dos.writeDouble(d);
        dos.flush();
        data=bos.toByteArray();
        dos.close();
        return data;
    }
}

server:

package com.lzs.net;

import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 * Created by zaish on 2016-3-20.
 */
public class MyUDPServer {
    public static void main(String[] args) throws IOException {
        //1)创建服务端DatagramSocket+指定端口
        DatagramSocket ds=new DatagramSocket(8888);
        //2)准备接受容器 字节数组 封装DatagramPacket
        byte[] container=new byte[1024];
        DatagramPacket dp=new DatagramPacket(container,container.length);
        //3)接受数据
        ds.receive(dp);
        //4)分析
        double data=convert(dp.getData());
        System.out.println(data);
       // 5)释放资源
        ds.close();
    }
    public static double convert(byte[] data) throws IOException {
        DataInputStream dis=new DataInputStream(new ByteArrayInputStream(data));
        double d=dis.readDouble();
        dis.close();
        return d;
    }
}


你可能感兴趣的:(UDP编程)