javaNIO學習筆記一

怪我冷i發表於2017-03-12


傳統IO

第一步

輸入命令cmd 開啟控制檯,輸入 telnet  127.0.0.1 10101連線上服務端。

按ctrl+] 開啟回顯,輸入send hello傳送訊息1

第二步

輸入命令cmd 開啟控制檯,輸入 telnet  127.0.0.1 10101連線上服務端。

按ctrl+] 開啟回顯,輸入send hello2傳送訊息2

第三步

這時,發現服務端阻塞,只接收到一個訊息。


第四步

關閉命令列視窗1,發現這時才接收到第二個訊息。



原始碼


package OIO;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
 * 傳統socket服務端
 * @author -琴獸-
 *
 */
public class OioServer2 {
	
	//  telnet 127.0.0.1 10101
	//@SuppressWarnings("resource")
	public static void main(String[] args) throws Exception {

		 
		//建立socket服務,監聽10101埠
		ServerSocket server=new ServerSocket(10101);
		System.out.println("伺服器啟動!");
		while(true){
			//獲取一個套接字(阻塞)
			final Socket socket = server.accept();
			System.out.println("來個一個新客戶端!");
		 
					//業務處理
					handler(socket);
			 
			 
			
		}
	}
	
	/**
	 * 讀取資料
	 * @param socket
	 * @throws Exception
	 */
	public static void handler(Socket socket){
			try {
				byte[] bytes = new byte[1024];
				InputStream inputStream = socket.getInputStream();
				
				while(true){
					//讀取資料(阻塞)
					int read = inputStream.read(bytes);
					if(read != -1){
						System.out.println(new String(bytes, 0, read));
					}else{
						break;
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
				try {
					System.out.println("socket關閉");
					socket.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
	}
}


相關文章