UDP

1.DatagramSocket

     此类表示用来发送和接收数据报包的套接字。

  

 DatagramSocket(int port)
          创建数据报套接字并将其绑定到本地主机上的指定端口。

 voidsend(DatagramPacket p)
          从此套接字发送数据报包。

 voidreceive(DatagramPacket p)
          从此套接字接收数据报包。当此方法返回时,DatagramPacket 的缓冲区填充了接收的数据。

 

2.DatagramPacket

     此类表示数据报包。

DatagramPacket(byte[] buf, int length)
          构造 DatagramPacket,用来接收长度为 length 的数据包。

DatagramPacket(byte[] buf, int length, InetAddress address, int port)
          构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。

 

UDP并无客户端和服务器端之分

示例一:

(1)“客户端”发送

 byte buf[]="china".getBytes();
  //构造数据报包,将长度为 length 的包发送到指定主机上的指定端口号。
  DatagramPacket dp=new DatagramPacket(buf,buf.length,new InetSocketAddress("127.0.0.1",8888));
  //从此端口发出
  DatagramSocket ds=new DatagramSocket(6789);
  //发送数据包
  ds.send(dp);
  ds.close();

(2)“服务器端”接收

  byte [] buf=new byte[1024];
   // 构造 DatagramPacket,用来接收长度为 length 的数据包。
   DatagramPacket dp=new DatagramPacket(buf,buf.length);
   //从此端口接受
   DatagramSocket ds=new DatagramSocket(8888);

 //接受数据包
    ds.receive(dp);
    //还原
    System.out.println(new String(buf,0,dp.getLength()));

 

示例2:发送一long类型数据

(1)“客户端”发送

//下面的程序为向服务器端发送一long类型数据
 //先写入字节数组输出流---->再转换成字节数组
  long l=1234567L;
  /*
   * ByteArrayOutputStream:此类实现了一个输出流,其中的数据被写入一个 byte 数组
   */
  ByteArrayOutputStream baos=new ByteArrayOutputStream();
 //创建一个新的数据输出流,将数据写入指定基础输出流。
  DataOutputStream dos=new DataOutputStream(baos);
  //将一个 long 值以 8-byte 值形式写入基础输出流中,先写入高字节。
  dos.writeLong(l);
  //创建一个新分配的 byte 数组。
  byte []buf= baos.toByteArray();
  //打包
  DatagramPacket dp=new DatagramPacket(buf,buf.length,new InetSocketAddress("127.0.0.1",8888));
  DatagramSocket ds=new DatagramSocket(6789);
  ds.send(dp);
  ds.close(); 

 

(2)“服务器端”接收

//下面的程序为接受到long类型数据如何输出
   byte []buf=new byte[1024];
   DatagramPacket dp=new DatagramPacket(buf,buf.length);
   DatagramSocket ds=new DatagramSocket(8888); 

  //接受
    ds.receive(dp);
    //创建一个 ByteArrayInputStream,使用 buf 作为其缓冲区数组。
    ByteArrayInputStream bais=new ByteArrayInputStream(buf);
    DataInputStream dis=new DataInputStream(bais);
    System.out.println(dis.readLong());

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值