天天看點

java網絡程式設計socket簡說

最近在複習網絡程式設計方面的知識,研究了socket的網絡通信,下面把最近的學習心得總結下,希望大家共同探讨,有需要的朋友可以看下,如果文中有什麼問題,請及時指出共同進步!!!

java網絡程式設計socket簡說

socket通信主要分為TCP/IP和UDP兩種形式,一種是資料報通信,另一種就是流通信。

其中TCP/IP通信需要實作‘三次握手’,成功後方可通信,TCP是一種基于連接配接的協定。在使用流通信之前,我們必須在通信的一對兒socket之間建立連接配接。其中一個socket作為伺服器進行監聽連接配接請求。另一個則作為用戶端進行連接配接請求。一旦兩個socket建立好了連接配接,他們可以單向或雙向進行資料傳輸——就是流通信;流通信協定,也叫做TCP(Transfer Control Protocol,傳輸控制協定)。

UDP可以直接傳輸,傳輸是使用DatagramSocket,DatagramPacket進行傳輸,在UDP中,每次發送資料報時,需要附帶上本機的socket描述符和接收端的socket描述符。而由于TCP是基于連接配接的協定,在通信的socket對之間需要在通信之前建立連接配接,是以會有建立連接配接這一耗時存在于TCP協定的socket程式設計。

在UDP中,資料報資料在大小上有64KB的限制。而TCP中也不存在這樣的限制。一旦TCP通信的socket對建立了連接配接,他們之間的通信就類似IO流,所有的資料會按照接受時的順序讀取。

安全方面:

UDP傳輸不安全,傳輸過程中可能會出現資料丢失,發送的資料報不一定會按照其發送順序被接收端的socket接受。然後TCP是一種可靠的協定。接收端收到的包的順序和包在發送端的順序是一緻的。

理論性的東西就說這些吧,下面來看看實用性的,看看代碼

java網絡程式設計socket簡說

先看下TCP/IP,主要是對Socket,輸入,輸出流的操作,用戶端發送請求,服務端接收并傳回資訊

用戶端代碼:

Socket對象需要兩個參數一個是服務端IP,另一個是端口号

讀取服務端傳回資訊時,使用了兩種方法,第二種是BufferedReader緩沖流,這個就像把流放在一個桶裡,等桶滿了在一起讀取

java網絡程式設計socket簡說
java網絡程式設計socket簡說
java網絡程式設計socket簡說

下面試TCP的服務端代碼,服務端使用ServerSocket來接受,需要提供一個端口号7011是本文中指定的端口号,

通過ServerSocket對象的accept()方法擷取通信的Socket對象

後面兩部分代碼是接受用戶端資訊的輸入流,和對用戶端回複資訊的輸出流

java網絡程式設計socket簡說
java網絡程式設計socket簡說
java網絡程式設計socket簡說

TCP的就到這裡吧,UDP的會在後面的篇幅中講解,歡迎吐槽

繼續閱讀