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

      

  • 相关阅读:
    第二次作业循环语句
    c语言01次作业分支,顺序结构
    PAT 1027. Colors in Mars
    PAT 1026 Table Tennis
    PAT 1035 Password
    PAT 1038. Recover the Smallest Number
    PAT 1028 List Sorting (25)
    PAT 1041 Be Unique (20)
    PAT 1025 PAT Ranking
    1037. Magic Coupon
  • 原文地址:https://www.cnblogs.com/fliay/p/7611778.html
Copyright © 2011-2022 走看看