最近面試的時候面試官問了我好幾次關于Socket編程的知識,QAQ。一直沒有深入學習過網絡編程的內容。今天去圖書館借了一本孫衛琴老師的網絡編程的書,這幾周下了決心要好好學學。
Socket一般翻譯成中文叫套接字,wiki是這么說的,network socket 是通過計算機網絡的進程間通信(ipC)的端點。現在大部分的OS都實現了socket interface,也就是我們說的Socket API。Socket API簡單來說就是把下層的數據進行一封裝,然后上層(應用層)利用API來進行與遠程主機連接。是不是有點像Socket原來的意思呢(插座)? Java 中套接字主要有三個類,分別是ServerSocket,Socket和DatagramSocket類,前兩個是我今天要說的重點,都是建立在TCP協議的基礎上,DatagramSocket是建立在UDP協議的基礎上的。而且我們的Socket編程也是基于C/S通信模式的,那我再給大家科普一下這個C/S是什么鬼。
大名客戶端-服務器通信模式(client-server),和B/S(browser-server)一起是目前主流的通信模式,C/S結構是醬紫:
C/S大致步驟是醬紫:
客戶端接受到服務器端的響應,并根據響應決定是否還要發送請求。我們今天的程序就是基于C/S來編寫的,而且是在TCP/IP協議的基礎上。
圖中已經很清楚的說明了Java中服務器端和客戶端的通信方式。實現的程序:客戶端訪問host為"localhost"(也就是127.0.0.1,已經在hosts文件里面有了),port為8000的服務器,訪問成功后向其發送任意字符串,服務器端接受到來自客戶端的字符串之后向客戶端發送Echo:前綴的字符串,若客戶端發送的字符串為bye,則服務器與客戶端的 socket關閉。EchoSocket.javaEchoService.java參考的鏈接:Network socketTCP協議客戶端服務器模式
新聞熱點
疑難解答