UDP编程系列二

在UDP系列一之上的扩展

server端

程序解析:在ds.receive(dp)接收到数据的时候,包装了两层数据管道,然后读取的时候转化成long型数据读取出来

package networkProgramming;

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

public class TestUDPServer1 {
    public static void main(String[] args) throws Exception{
        byte buf [] = new byte[1024];
        DatagramPacket dp = new DatagramPacket(buf, buf.length);
        DatagramSocket ds=new DatagramSocket(5678);
        while(true) {
            //已接收数据在buf缓冲区
            ds.receive(dp);
            //从buf中读取
            ByteArrayInputStream bais = new ByteArrayInputStream(buf);
            DataInputStream dis = new DataInputStream(bais);
            //转换为long型
            System.out.println(dis.readLong());
        }
    }
}

client端

程序解析:就是在long型数据外包装两层数据管道,再将它转换为byte数据类型发送出去

package networkProgramming;

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

public class TestUDPClient1 {
    public static void main(String[] args) throws Exception{
        long n=10000L;
        /*
         * public class ByteArrayOutputStream extends OutputStream
         * 该类实现了将数据写入字节数组的输出流。 当数据写入缓冲区时,缓冲区会自动增长。
         */
        ByteArrayOutputStream baos=new ByteArrayOutputStream();
        DataOutputStream dos=new DataOutputStream(baos);
        dos.writeLong(n);
        //long型整数转换为字节数组
        byte [] buf = baos.toByteArray();
        System.out.println(buf.length);
        
        DatagramPacket dp =new DatagramPacket(buf, buf.length,
                new InetSocketAddress("127.0.0.1", 5678));
        DatagramSocket ds=new DatagramSocket(9999);
        ds.send(dp);
        ds.close();
    }
}
原文地址:https://www.cnblogs.com/zjm1999/p/10250078.html