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(); } }