J2SE之Socket編程
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編程