普通socket一般分為serversocket和socket兩大類。
serversocket用於服務端,其accept()方法可以用來監聽請求,該方法方法在連線傳入之前一直阻塞,也就是說服務端程式會停留在該方法呼叫處,直到有客戶端請求連線進來。accept()方法會返回乙個socket物件。
socket用來傳輸資料,jdk中描述為套接字,理解起來還是有點困難。
tcp用主機的ip位址加上主機上的埠號作為tcp連線的端點,這種端點就叫做套接字(socket)。一般客戶端使用socket繫結服務端ip以及監聽埠發起請求並傳輸資料。
用大白話說就是:serversocket是服務端用來檢測客戶端是否使用socket發起請求了,如果有,拿到socket,從其中拿到客戶端的請求資料,再將響應資料寫入socket,這其中讀取寫入資料又設計io流操作。客戶端使用socket物件傳送請求資料到服務端,然後在從該socket中拿到服務端的響應資料。
**實現如下(**中注釋寫的很詳細):
服務端模擬實現:
/* 模擬伺服器端-普通
socket
實現 */
public class
server
catch
(ioexceptione)
}}客戶端程式如下:
/* 模擬客戶端-普通
socket
實現 */
public class
client
catch
(ioexceptione)
}}先啟動服務端程式,再啟動客戶端程式。輸出如下:
服務端先啟動後沒有輸出。
啟動客戶端後:
服務端輸出:
客戶端輸出:
socket與sock的聯絡
套接字究竟是什麼 如果你知道linux系統中程序間通訊的方式,就應該知道套接字也是其中一種。但套接字特別之處在於它不僅可以用來實現同一臺主機上程序間的通訊,還可以用來實現主機間的程序間的通訊。通訊的雙方各自開啟乙個套接字,套接字之間通過通訊鏈路相連。如果把兩個套接字之間的 連線 比喻成 水管 那麼套...
套接字的秘密 socket與sock
那麼如何把套接字和檔案聯絡起來呢?答案就是通過下面這張圖。其中task struct表示乙個程序,files struct中的fd array表示該程序開啟的所有描述符,對於套接字來說,與其他型別檔案的區別就是最終f op指向的是socket file ops。不過,可以看到,這裡的socket f...
深入理解阻塞socket和非阻塞socket
什麼是阻塞socket,什麼是非阻塞socket。對於這個問題,我們要先弄清什麼是阻塞 非阻塞。阻塞與非阻塞是對乙個檔案描述符指定的檔案或裝置的兩種工作方式。阻塞的意思是指,當試圖對該檔案描述符進行讀寫時,如果當時沒有東西可讀或者暫時不可寫,程式就進入等待狀態,直到有東西可讀或者可寫為止。非阻塞的意...