所謂socket一般也稱做「套接字」,應用程序一般經過「套接字」向網絡發出請求或者應答網絡請求。java
雙方通話的過程,是一方向電話機發出信號和對方電話機接收信號的過程,至關於向socket發送數據和從socket接收數據。通話結束後,一方掛起電話機至關於關閉socket,撤銷鏈接。服務器
在電話系統中,通常用戶只能感覺到本地電話機和對方電話號碼的存在,創建通話的過程,話音傳輸的過程以及整個電話系統的技術細節對他都是透明的,這也與socket機制很是類似。socket利用網間網通訊設施實現進程通訊,但它對通訊設施的細節絕不關心,只要通訊設施能提供足夠的通訊能力,它就知足了。網絡
抽象出來,socket實質上提供了進程通訊的端點。進程通訊以前,雙方首先必須各自建立一個端點,不然是沒有辦法創建聯繫並相互通訊的。正如打電話以前,雙方必須各自擁有一臺電話機同樣。在網間網內部,每個socket用一個半相關描述:(協議,本地地址,本地端口)socket
服務器監聽:是服務器端套接字並不定位具體的客戶端套接字,而是出於等待鏈接的狀態,實時監控網絡狀態。spa
客戶端請求:是指由客戶端的套接字提出鏈接請求,要鏈接的目標是服務器端的套接字。爲此,客戶端的套接字必須首先描述它要鏈接的服務器的套接字,指出服務器端套接字的地址和端口號,而後就向服務器端套接字提出鏈接請求。操作系統
鏈接確認:是指當服務器端套接字監聽到或者說接收到客戶端套接字的鏈接請求,它就響應客戶端套接字的請求,創建一個新的線程,把服務器端套接字的描述發給客戶端,一旦客戶端確認了此描述,鏈接就創建好了。而服務器端套接字繼續處於監聽狀態,繼續接收其餘客戶端套接字的鏈接請求。.net
服務器:使用ServerSocket監聽指定的端口,端口能夠隨意指定(因爲1024如下的端口一般術語保留端口,在一些操做系統中不能夠隨意使用,因此建議使用大於1024的端口),等待客戶鏈接請求,客戶鏈接後,會話產生;在完成會話後,關閉鏈接。線程
客戶端:使用Socket對網絡上某一個服務器的某一個端口發出鏈接請求,一旦鏈接成功,打開會話;會話完成後,關閉Socket。客戶端不須要指定打開的端口,一般是臨時的、動態的分配一個1024以上的端口。對象
java.net.Socket繼承於java.lang.Object,有八個構造器,其方法並很少,下面介紹使用最頻繁的三個方法,其餘方法你們能夠參見JDK文檔。繼承
Accept方法用於產生「阻塞」,直到接收到一個鏈接,而且返回一個客戶端的socket對象實例。「阻塞」是一個術語,它使程序運行暫時「停留」在這個地方,直到一個會話產生,而後程序繼續;一般「阻塞」是由循環產生的。
getInputStream方法得到網絡鏈接輸入,同時返回一個InputStream對象實例。
getOutputStream方法鏈接的另外一端將獲得輸入,同時返回一個OutputStream對象實例。注意:其中getInputStream和getOutputStream方法都可能會產生一個IOException,它必須被捕獲,由於它們返回的流對象,一般都會被另外一個流對象使用。