Java—網路連線協議
阿新 • • 發佈:2020-11-17
一、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:非阻塞