1. 程式人生 > >Socket程式設計(Android客戶端+PC伺服器端)

Socket程式設計(Android客戶端+PC伺服器端)

一個多月沒有寫東西了,感覺像過了一個暑假。。。得意廢話不多說了,今天來記錄一下這兩天學習Socket的內容。按照我研究思路來進行一步步的深入Socket。

一、什麼是Socket

網路上的兩個程式通過一個雙向的通訊連線實現資料的交換,這個連線的一端稱為一個socket。建立網路通訊連線至少要一對埠號(socket)。socket本質是程式設計介面(API),對TCP/IP的封裝,TCP/IP也要提供可供程式設計師做網路開發所用的介面,這就是Socket程式設計介面;HTTP是轎車,提供了封裝或者顯示資料的具體形式;Socket是發動機,提供了網路通訊的能力。       這是百度提供的解釋,按我的理解,其實Socket就是通訊的一種方式,資料進行交換的通道口,讓客戶端和伺服器端建立其溝通的通道。

二、Socket區別於Http請求

Socket通訊在雙方建立其連線後就可以直接進行資料傳輸,資料丟失率低,使用簡單且易於移植,而Http則是要客戶端進行請求後伺服器端才能進行資料的返回,並且http頭包含了很多的資訊,影響通訊的速率。

(額外的說一下,安卓網路通訊一般有兩種方式:走Http協議和Socket(套接字)

三、Socket的傳輸模式(TCP面向連線和UDP無連線)
     Socket有兩種主要的操作方式:面向連線的和無連線的,即TCP和UDP。
  面向連線的Socket操作就像一部電話,Socket必須在傳送資料之前與目的地的Socket取得連線,一旦連線建立了,Socket就可以使用一個流介面進行開啟、讀寫以及關閉操作。並且,所有傳送的資料在另一端都會以相同的順序被接收。
  無連線的Socket操作就像一個郵件投遞,每一個數據報都是一個獨立的單元,它包含了這次投遞的所有資訊(目的地址和要傳送的內容)。在這個模式下的Socket不需要連線目的地Socket,它只是簡單的投出資料報。


四、TCP方式的Socket連線例項


這個不多說,可以參考這篇文章:http://blog.csdn.net/x605940745/article/details/17001641

我這裡只解析一下這篇文章中的一些要點

1、客戶端和伺服器端的選擇:客戶端一般是我們手機端,可以和文章中的一樣配置,關於伺服器端,其實只要安裝了JDK,自然就擁有通訊的功能,我們只需要在Eclipse或者MyEclipse中寫好文章中伺服器端的程式碼,執行起來即可,用accept()方法啟動伺服器端,等待客戶端的連線,在未連線的情況下,伺服器端處於堵塞的狀態。

2、看到客戶端連線伺服器端需要填寫IP,我對這個疑惑了一會,後面發現只要能在cmd中能ping XXip -t(即自己的電腦的IP),你就能和服務端聯絡。

3、最後就是埠號啦,在選擇埠時,必須小心。每一個埠提供一種特定的服務,只有給出正確的埠,才 能獲得相應的服務。0~1023的埠號為系統所保留,例如http服務的埠號為80,telnet服務的埠號為21,ftp服務的埠號為23, 所以我們在選擇埠號時,最好選擇一個大於1023的數以防止發生衝突。在建立socket時如果發生錯誤,將產生IOException,在程式中必須對之作出處理。所以在建立Socket或ServerSocket是必須捕獲或丟擲例外。

最後給個截圖,我這裡使用的通訊埠號是19999


這篇文章也可以看一下,寫的也可以,這裡我就不多說了