客户端与服务器端
一、HTTP協議: 1、定義:用于服務器與客戶端的通訊的協議,允許web服務器和瀏覽器通過互聯網進行發送和接收數據。是一種請求和響應協議,使用可靠的TCP協議,TCP協議的端口為80,是一種面向連接的協議。 2、HTTP協議請求的三個組成部分:這三部分之間用回車換行符(CRLF)隔開 請求部分:方法(GET/POST等7種,其他的很少用,書上有介紹)[空格,該部分內容以空格隔開] 統一資源標識符URI[空格,該部分內容以空格隔開 ] 協議/協議版本 URL通常都是相對服務器的根目錄,因此以“/”開頭。 請求頭部:請求的頭部包含了關于客戶端環境和請求的主體內容的有用信息。例如它可能包括瀏覽器設置的語言,主體內容的長度等等。每個頭部通過一個回車換行符(CRLF)來分隔的。 請求主體內容:對于HTTP請求格式來說,頭部和主體內容之間有一個回車換行符(CRLF)是相當重要的。CRLF告訴HTTP服務器主體內容是在什么地方開始的。在一些互聯網編程書籍中,CRLF還被認為是HTTP請求的第四部分。 3、 HTTP響應也包括三個部分:? · 方法—統一資源標識符(URI)—協議/版本 · 響應的頭部 · 主體內容 二、服務器與客戶端通訊 1、服務器與客戶端通訊需要用到兩個部分:Socket(客戶端)和ServerSocket(服務器端) (1)ServerSocket(java.net.ServerSocket, 服務器端套接字),要創建一個服務器套接字,你需要使用ServerSocket類提供的四個構造方法中的一個。你需要指定IP地址和服務器套接字將要進行監聽的端口號。通常,IP地址將會是127.0.0.1,也就是說,服務器套接字將會監聽本地機器。服務器套接字正在監聽的IP地址被稱為是綁定地址。服務器套接字的另一個重要的屬性是backlog,這是服務器套接字開始拒絕傳入的請求之前,傳入的連接請求的最大隊列長度,四種構造方法分別為: ServerSocket ss = new ServerSocket();//創建一個未綁定的ServerSocket ServerSocket ss = new ServerSocket(int port);//創建一個綁定到某端口的ServerSocket ServerSocket ss = new ServerSocket(int port, int log);//創建一個綁定到某端口的ServerSocket,并設置了最大隊列長度。 ServerSocket ss = new ServerSocket(int port, int log, InetAddress address);//創建一個綁定到某地址、某端口的ServerSocket,并設置了最大隊列長度。 對于第四個構造方法,綁定地址必須是InetAddress的一個實例,一種構造InetAddress對象的簡單的方法是調用它的靜態方法getByName,傳入一個包含主機名稱的字符串,就像下面的代碼一樣。 InetAddress.getByName("127.0.0.1"); 創建ServerSocket的常用方法:?? new ServerSocket(8080, 1, InetAddress.getByName("127.0.0.1")); 代碼構造了一個監聽本地機器8080端口的ServletSocket,它的隊列長度為1.? 服務器創建后就保持等待狀態(TCP協議,可靠的傳輸協議,是同步協議,即沒有響應返回就一直等待) (2)Socket(java.net.Socket類,客戶端套接字):需要知道要訪問的服務器端的IP/主機名和端口號,即可向服務器端發送請求。可以用Socket的眾多構造方法中的一個來建立Socket? ? ? ? ? new Socket ("yahoo.com", 80); 一旦你成功創建了一個Socket類的實例,你可以使用它來發送和接受字節流。要發送字節流,你首先必須調用Socket類的getOutputStream方法來獲取一個java.io.OutputStream對象。要發送文本到一個遠程應用,你經常要從返回的OutputStream對象中構造一個java.io.PrintWriter對象。要從連接的另一端接受字節流,你可以調用Socket類的getInputStream方法用來返回一個java.io.InputStream對象。? (3)服務器端通過accept()方法來接收客戶端的連接請求,并與客戶端建立連接,同時返回一個Socket Socket s = ?ss. accept(); (4)通過Socket可以獲得一個輸入流和一個輸出流, 輸入流用于讀取客戶端請求數據,輸出流用于向客戶端返回響應信息。 比如:InputStream input = ?s.getInputStream(); OutputStream output = s.getOutputStream();
轉載于:https://www.cnblogs.com/sunyuhuan/p/7200175.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
- 上一篇: 视频编解码学习之二:编解码框架
- 下一篇: 轻轻松松教你写日志-超级简单