Java NIO实例UDP发送接收数据代码分享

  

Java的NIO包中,有一个专门用于发送UDP数据包的类:DatagramChannel, UDP是一种无连接的网络协议,
  一般用于发送一些准确度要求不太高的数据等。

  

<强>完整的服务端程序如下:

        公开课StatisticsServer {//每次发送接收的数据包大小   私人最终int MAX_BUFF_SIZE=1024 * 10;//服务端监听端口,客户端也通过该端口发送数据   私人int端口;   私人DatagramChannel通道;   私人选择器选择器;   私人ScheduledExecutorService es=Executors.newScheduledThreadPool (1);   公共空间init()抛出IOException {//创建通道和选择器   选择器=Selector.open ();   频道=DatagramChannel.open ();//设置为非阻塞模式   channel.configureBlocking(假);   channel.socket ()。bind(新的InetSocketAddress(端口));//将通道注册至选择器,监听只读消息(此时服务端只能读数据,无法写数据)   通道。注册(选择器,SelectionKey.OP_READ);//使用线程的方式,保证服务端持续等待接收客户端数据   es。scheduleWithFixedDelay(新Runnable () {   @Override   公共空间run () {   尝试{   而(selector.select()在0) {   Iterator迭代器=selector.selectedKeys () .iterator ();   而(iterator.hasNext ()) {   SelectionKey关键=iterator.next ();   尝试{   iterator.remove ();   如果(key.isReadable ()) {//接收数据   doReceive(关键);   }   }捕捉(异常e) {   记录器。错误(“SelectionKey接收异常”,e);   尝试{   如果(关键!=null) {   key.cancel ();   .close key.channel () ();   }   }捕捉(ClosedChannelException cex) {   记录器。错误(“关闭通道异常”,cex);   }   }   }   }   }捕捉(IOException e) {   logger.error(“选择器。选择例外”,e);   }   }   },0 l 2 l, TimeUnit.MINUTES);   }//处理接收到的数据   私人空间doReceive (SelectionKey键)抛出IOException {   字符串内容=" ";   DatagramChannel sc=(DatagramChannel) key.channel ();   ByteBuffer缓冲=ByteBuffer.allocate (MAX_BUFF_SIZE);   buffer.clear ();   sc.receive(缓冲);   buffer.flip ();   而(buffer.hasRemaining ()) {   byte [] buf=new byte [buffer.limit ());   buffer.get (buf);   内容+=新的字符串(buf);   }   buffer.clear ();   logger.debug(“接收内容=" +内容);   如果(StringUtils.isNotBlank(内容)){   doSave(内容);   }   }   }      

<强>客户端发送完整例子如下:

        DatagramChannel频道=DatagramChannel.open ();      StringBuilder某人=new StringBuilder ();   sb.append (“2017-03-09 12:30:00;”)   .append (“aaa”)   .append (“testapp;“)   .append (“test.do;“)   .append(“参数=你好;”)   .append(“测试”,)   .append (“100”)   .append (" 1 ");   ByteBuffer缓冲=ByteBuffer.allocate (10240);   buffer.clear ();   .getBytes buffer.put (sb.toString () ());   buffer.flip ();//此处IP为服务端IP地址,端口和服务端的端口一致   int n=通道。发送(缓冲,新的InetSocketAddress (127.0.0.1, 8080));   System.out.println (n);//每次数据发送完毕之后,一定要调用亲密的方法,来关闭占用的udp端口,否则程序不结束,端口不会释放    channel.close ();      

  

以上就是本文关于Java NIO实例UDP发送接收数据代码分享的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

  

Rxjava功能操作符的使用方法详解

  

分享一个简单的java爬虫框架

  

Javaweb应用使用限流处理大量的并发请求详解

  

有什么问题可以随时留的言,小编会及时回复大家的。感谢朋友们对本站的支持!

Java NIO实例UDP发送接收数据代码分享