1. 程式人生 > >J2SE之Socket編程

J2SE之Socket編程

socket編程 socket連接過程 服務器端server 客戶端client java程序實現讀取http請求協議

1、什麽是Socket編程?

- 網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱之為一個Socket。Socket的英文原意是“孔”或者是“插座”。通常也稱之為“套接字”,用於描述IP地址和端口,可以用來實現不同計算機之間的通信。每種服務都打開一個Socket,並綁定到一個端口中,不同的端口對應著不同的服務。Socket正如其英文原意那樣,像一個多孔插座,一臺主機猶如布滿各種插座的房間,每個插座有一個編號,有的插座提供220伏交流電,有的提供110伏交流電,有的則提供有線電視節目。客戶軟件將插頭插到不同編號的插座,就可以得到不同的服務。


2、連接過程

- 根據連接啟動的方式以及本地套接字要連接的目標,套接字之間的連接過程可以分為三個步驟:服務器監聽,客戶端請求,連接確認。

- 第一步:服務器監聽,是服務器套接字並不定位具體的客戶端套接字,而是處於等待連接的狀態,實時監控網絡狀態。

- 第二步:客戶端請求,是指客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然後就向服務器端套接字提出連接請求。

- 第三步:連接確認,是指當服務器端套接字監聽到或者接收到客戶端套接字的連接請求,它就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的描述發給客戶端,一旦客戶端確認了此描述,連接就建立好了。而服務器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求。


3、Java中如何實現Socket編程

- JavaSE中提供了實現Socket編程的API,讓網絡編程變得更簡單,更夾面向對象。實現兩臺計算機(兩個服務)之間的通訊,至少要編寫以下的代碼:


- 服務器端Server.java:

a、創建服務器端套接字,表示創建一個服務,並綁定端口號8080。

技術分享

b、開始監聽網絡,準備接收客戶端消息,程序在此等待,客戶端發送請求之後,接收客戶端套接字。

技術分享

c、接收客戶端消息:

- java.net.Socket類中getInputStream()方法返回這個Socket類對象的字節輸入流:

技術分享

d、讀取客戶端消息:

e、關閉流,關閉客戶端套接字和關閉服務器端套接字:


- 示例代碼:

技術分享


- 客戶端Client.java:

a、創建客戶端套接字,指向某臺電腦的某臺服務

技術分享

b、發送消息

c、發送

技術分享

- java.net.Socket類中getOutputStream()方法返回這個Socket類對象的字節輸出流:

技術分享

- java.io.PrintWriter打印字符輸出流類中的print(String s)方法:流中輸出一個字符串

技術分享

d、關閉流,關閉客戶端套接字


示例代碼:

技術分享


4、讀取的從瀏覽器發送的HTTP請求協議

- 上面的客戶端程序不再使用 java 代碼,我們嘗試將“客戶端程序”改為“瀏覽器客戶端軟件”,編寫以下服務器端程序 :

技術分享


- 讀取從瀏覽器中發送的HTTP請求協議:打開 FF 瀏覽器(標準瀏覽器),在地址欄上輸入以下 URL ,然後敲回,控制臺中顯示如下內容:

技術分享

技術分享



J2SE之Socket編程