UDP数据传输

Udp服务端

public class UDPServer {
    private static Logger log = Logger.getLogger(UDPServer.class);
    public static void main(String[] args){
        try {
            InetAddress byName = InetAddress.getByName("192.168.0.30");
            DatagramSocket socket = new DatagramSocket(5000,byName);
            byte[] bytes = new byte[1024];
            log.info("开始接收数据流");
            while (true){
                DatagramPacket request = new DatagramPacket(bytes,bytes.length);
                socket.receive(request);

                String s = new String(request.getData(), 0, request.getLength(), "utf-8");
                log.info("接收的数据:"+s);

                byte[] res = "I get it".getBytes();
                DatagramPacket response = new DatagramPacket(res,res.length,request.getAddress(),request.getPort());
                //socket.send(response);
                Thread.sleep(2000);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

Udp客户端

public class UDPClient {
    private static Logger log = Logger.getLogger(UDPClient.class);
    public static void main(String[] args) throws Exception{
        byte[] buf = new byte[32];
        InetAddress byName = InetAddress.getByName("192.168.0.30");
        DatagramSocket socket = new DatagramSocket(5001,byName);
        File file = new File("C://db//iotest//sonProcess.log");
        FileInputStream in = new FileInputStream(file);
        DatagramPacket request = null;
        DatagramPacket respone = null;
        int length = 0;
        while((length=in.read(buf))!=-1){
           request = new DatagramPacket(buf,length,byName,5000);
           socket.send(request);
           respone = new DatagramPacket(buf,buf.length);
           //socket.receive(respone);
           // String s = new String(respone.getData(), 0, respone.getLength(), "utf-8");
            //log.info("服务端回复:"+s);
        }
    }
}

DatagramPacket

英文意思为数据包裹,这个包裹也是有大小的,这个量是由传入的byte数组的大小决定,而且最大是接收的数据填满字节数组的最大长度。客户端与服务端就是相互传数据包裹进行交互的,这里需要注意的是发送包裹是带数据的字节,大小,目的地(InetAddress),端口。接收包裹:传入字节数组,最大值即可,DatagramSocket会在接收的时候补充其他数据。注意:发送包裹接收包裹最好的匹配是两个的buf(字节数组的大小)相同,或者,接收包裹要小于发送包裹,因为,一个发送包裹对应一个接收包裹,若接收包裹小于发送包裹就会造成字节丢失。

DatagramSocket

其实在udp中没有像tcp中分socket与socketServer吧客户端与服务端分清。不管哪个端,都是DatagramSocket负责接收和发送数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西门吹水之城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值