zoukankan      html  css  js  c++  java
  • JavaNIO阻塞IO添加服务器反馈

    package com.java.NIO;
    
    import java.io.IOException;
    import java.net.InetSocketAddress;
    import java.nio.ByteBuffer;
    import java.nio.channels.FileChannel;
    import java.nio.channels.ServerSocketChannel;
    import java.nio.channels.SocketChannel;
    import java.nio.file.Paths;
    import java.nio.file.StandardOpenOption;
    
    import org.junit.Test;
    
    public class TestBlockingNIO {
    
    	@Test//客户端
    	public void client() throws IOException{
    		//1.获取通道
    		SocketChannel sChannel = SocketChannel.open(new InetSocketAddress("127.0.0.1", 1008));
    		
    		FileChannel inChannel = FileChannel.open(Paths.get("1.jpg"), StandardOpenOption.READ);
    		
    		//2.分配指定大小的缓冲区
    		ByteBuffer buf = ByteBuffer.allocate(1024);
    		
    		//3.读取本地文件,并且发送到服务器
    		while(inChannel.read(buf)!=-1){
    			buf.flip();
    			sChannel.write(buf);
    			buf.clear();
    		}
    		
    		//开启非阻塞模式
    		sChannel.shutdownOutput();
    		
    		//接收服务器反馈
    		int len = 0 ;
    		while ((len = sChannel.read(buf))!=-1){
    			buf.flip();
    			System.out.println(new String(buf.array(),0,len));
    			buf.clear();
    		}
    		
    		
    		
    		
    		//4.关闭通道
    		inChannel.close();
    		sChannel.close();
    	}
    	
    	
    	@Test//服务器
    	public void server() throws IOException{
    		//1.获取通道
    		ServerSocketChannel ssChannel = ServerSocketChannel.open();
    		
    		FileChannel  outChannel = FileChannel.open(Paths.get("2.jpg"), StandardOpenOption.WRITE,StandardOpenOption.CREATE);
    
    		//2.绑定链接
    		ssChannel.bind(new InetSocketAddress(1008));
    		
    		//3.获取客户端连接通道
    		SocketChannel sChannel = ssChannel.accept();
    		
    		//4.分配指定大小的缓冲区
    		ByteBuffer buf =ByteBuffer.allocate(1024);
    		
    		//5.接收客户数据并且保存到本地
    		while(sChannel.read(buf)!=-1){
    			buf.flip();
    			outChannel.write(buf);
    			buf.clear();
    		}
    		//发送反馈给客户端
    		buf.put("服务器接收数据成功".getBytes());
    		buf.flip();
    		sChannel.write(buf);
    		
    		//6.关闭通道
    		sChannel.close();
    		outChannel.close();
    		ssChannel.close();
    	
    	}
    }
    

      

  • 相关阅读:
    解决本地浏览器的跨域问题
    页面嵌入iframe关于父子传参调用
    仿微信、qq聊天,@好友功能
    创建新react项目 运行npm start 报错踩过的坑
    前端向后端获取数据的三种方法:ajax、axios、fetch
    观察者模式代码详解
    代理模式实现图片预加载、懒加载
    网站登录注册-Session 和token的总结
    浅谈MVC、MVVM的区别
    vue中methods、computed、watch区别
  • 原文地址:https://www.cnblogs.com/fliay/p/7611778.html
Copyright © 2011-2022 走看看