標籤:網路編程 socket udp tcp android4.0
Socket通常稱為“”通訊端。Socket字面上的中文意思為“插座”。一台伺服器可能會提供很多服務,每種服務對應一個Socket,而客戶的“插頭”也是一個Socket。Socket是應用程式層與TCP/IP協議族通訊的中間軟體抽象層,它是一組介面。Socket把複雜的TCP/IP協議族隱藏在Socket介面後面,對使用者來說,一組簡單的介面就是全部,讓Socket去組織資料,以符合指定的協議。Socket用於描述IP地址和連接埠,是一個通訊鏈的控制代碼。應用程式通常通過通訊端向網路發出請求或者應答網路請求。Socket的基本操作包括:(1)串連遠程機器(2)發送資料(3)接收資料(4)關閉串連(5)綁定連接埠(6)監聽到達資料(7)在綁定的連接埠上接受來自遠程機器的串連。
伺服器要和用戶端通訊,兩者都要執行個體化一個Socket。伺服器和用戶端的Socket是不一樣的,用戶端可以實現串連遠程機器、發送資料、接收資料、關閉串連等,伺服器還需要實現綁定連接埠,監聽到達的資料,接受來自遠程機器的串連。Android在包java.net裡面提供了兩個類:ServerSocket和Socket,前者用於執行個體化伺服器的Socket,後者用來執行個體化用戶端的Socket。在串連成功時,應用程式兩端都會產生一個Socket執行個體,操作這個執行個體,完成用戶端到伺服器所需的會話。
那麼如何構造一個Socket呢????
(1)常用的構造用戶端Socket的方法有以下幾種:
Socket():建立一個新的未串連的Socket。
Socket(Proxy proxy):使用指定的代理類型建立一個新的未串連的Socket。
Socket(String dstName,int dstPort):使用指定的目標伺服器的IP地址和目標伺服器的連接埠號碼,建立一個新的Socket。
Socket(String dstName,int dstPort,InetAddress localAddress,int localPort):使用指定的目標主機、目標連接埠、本地地址和本地連接埠,建立一個新的Socket。
Socket(InetAddress dstAddress,int dstPort):使用指定的本地地址和本地連接埠,建立一個新的Socket。
Socket(InetAddress dstAddress,int dstPort,InetAddress localAddress,int localPort):使用指定的目標主機、目標連接埠、本地地址和本地連接埠,建立一個新的Socket。
其中,proxy為Proxy 伺服器地址,dstAddress為目標伺服器IP地址,dstPort為目標伺服器的連接埠號碼(伺服器的每種服務都會綁定在一個連接埠上面),dstName為目標伺服器的主機名稱。
注意:0~1023連接埠為系統保留,使用者設定的連接埠號碼應該大於1023.
Socket類重要方法:
(1)Public InputStream getInputStream() 讀出該Socket中的資料
(2)public OutputStream getOutputStream() 向該Socket中寫入資料
(3)public synchronized void close() 關閉該Socket
(2)常用的構造伺服器端的ServerSocket的方法有以下幾種:
ServerSocket():構造一個新的未綁定的ServerSocket
ServerSocket(int port):構造一個新的ServerSocket執行個體並綁定到指定連接埠。如果Port參數為0,連接埠將由作業系統自動分配,此時進入隊列的數目將被設定為50.
ServerSocket(int port,int backlog):構造一個新的ServerSocket執行個體並綁定到指定連接埠,並且指定進入隊列的數目。如果port參數為0,連接埠將由作業系統系統分配
ServerSocket(int port,int backlog,InetAddress localAddress):構造一個新的ServerSocket執行個體並綁定到指定連接埠和指定地址。如果localAddress參數為null,則可以使 用任意地址,如果port參數為0,連接埠將由作業系統自動分配。
Socket一般有兩種類型:TCP通訊端和UDP通訊端。
TCP和UDP在傳輸過程中的具體實現方法不同。兩者都接收傳輸協議資料包並將其內容向前傳送到應用程式層。TCP把訊息分解成資料包並在接收端以正確的順序把它們重新裝配起來,TCP還處理對遺失資料包的重傳請求,位於上層的應用程式層要處理的事情就少多了。UDP不提供裝配和重傳請求這些功能,它只是向前傳送資訊包。位於上層的應用程式層必須確保訊息是完整的,並且是以正確的順序裝配的。
轉載請註明出處:http://blog.csdn.net/android_jiangjun/article/details/27670355