1. 程式人生 > 實用技巧 >Java—網路連線協議

Java—網路連線協議

一、TCP協議




注:一般給對方傳送IP地址,一般是為公網IP(因為有可能不在同個私網/區域網);若確定在同個私網中,則可以傳送私網IP地址

二、HTTP協議


http協議的原理(通過socket來封裝請求和響應內容)

public class HttpServer {
	public static void main(String[] args) throws IOException{
        ServerSocket serverSocket = new ServerSocket(8888);
      //一直監聽,直到受到停止的命令
        while (true) {
            Socket socket = null;
            try {
            	//如果沒有請求,會一直hold在這裡等待,有客戶端請求的時候才會繼續往下執行
                socket = serverSocket.accept();
                
                //使用多執行緒技術優化(執行緒池)
                // log
        		BufferedReader bufferedReader = new BufferedReader(
        				//獲取輸入流(請求)
        		        new InputStreamReader(socket.getInputStream()));
        		StringBuilder stringBuilder = new StringBuilder();
        		String line = null;
        		while ((line = bufferedReader.readLine()) != null
        				//得到請求的內容,注意這裡作兩個判斷非空和""都要,只判斷null會有問題
        		        ) {
        			System.out.println(line);
        		    stringBuilder.append(line).append("<br>");
        		}
        		String result = stringBuilder.toString();
//                        System.out.println(result);
        		// echo
        		//這裡第二個引數表示自動重新整理快取
        		PrintWriter printWriter = new PrintWriter(
        		        socket.getOutputStream(), true);
        		printWriter.print("HTTP/1.1 200 OK \r\n");
        		printWriter.print("Content-Type:text/html;charset=utf-8  \r\n");
        		printWriter.print("\r\n");
        		printWriter.print("<h5>你剛才傳送的請求資料是:<br> \r\n");
        		printWriter.write(result);//將日誌輸出到瀏覽器
        		printWriter.print("</h5> \r\n");
        		// release
        		printWriter.close();
        		bufferedReader.close();
        		socket.close();
        		
            } catch (IOException e) {
                e.printStackTrace();
                if(serverSocket != null) {
                	serverSocket.close();
                }
            }
        }
    }

}

socket:阻塞

nio:非阻塞

三、併發量的相關處理

四、常見的網路攻擊