android中的socket

什麼是Socket?     java

     所謂Socket一般也稱做「套接字」,用於描述IP地址和端口,是一個通訊連的句柄,應用程序一般經過「套接字」向網絡發送請求或者應答網絡請求,它就是網絡通訊過程當中端點的抽象表示。它主要包括如下兩個協議:編程

      TCP (Transmission Control Protocol 傳輸控制協議):傳輸控制協議,提供的是面向鏈接、可靠的字節流服務。當客戶和服務器彼此交換數據前,必須先在雙方之間創建一個TCP鏈接,以後才能傳輸數據。TCP提供超時重發,丟棄重複數據,檢驗數據,流量控制等功能,保證數據能從一端傳到另外一端。
      UDP (User Datagram Protocl 用戶數據報協議):用戶數據報協議,是一個簡單的面向數據報的運輸層協議。UDP不提供可靠性,它只是把應用程序傳給IP層的數據報發送出去,可是並不能保證它們能到達目的地。因爲UDP在傳輸數據報前不用在客戶和服務器之間創建一個鏈接,且沒有超時重發等機制,故而傳輸速度很快。
服務器

詳細解說以下:網絡

      TCP傳輸和UDP不同,TCP傳輸是流式的,必須先創建鏈接,而後數據流沿已鏈接的線路(虛電路)傳輸。所以TCP的數據流不會像UDP數據報同樣,每一個數據報都要包含目標地址和端口,由於每一個數據報要單獨路由。TCP傳輸則只須要在創建鏈接時指定目標地址和端口就能夠了。socket

  形象的講,TCP就像打電話,UDP就像發電報。宏觀上來看UDP是不分客戶端和服務端的。通訊雙方是平等的。微觀上來說只相對一個報文,發送端是客戶端,監聽端是服務端。發送端把數據報發給路由器就像把電報發給了郵局,後面的事情就是發送者沒法控制,也無從知曉的了。因此說是不可靠的,可能會出現報文丟失而無從知曉。就像每張電報都要有收件人同樣,每一個數據報都要有目的地址和端口。測試

  而TCP每次鏈接都是分客戶端和服務端的。鏈接的發起者(至關與撥號打電話的人)是客戶端,監聽者(至關於在電話邊等着接電話的人)是服務端。發起者指定要鏈接的服務器地址和端口(至關於撥號),監聽者經過和發起者三次握手創建鏈接(至關於聽到電話響去接電話)。創建鏈接後雙方能夠互相發送和接受數據(打電話)。spa

Java如何操做Socket?操作系統

       值得一提的是,Java分別爲TCP和UDP提供了相應的類,TCP是java.net中提供了兩個類Socket和ServerSocket,分別用來表示雙向鏈接的客戶端和服務端。這是兩個封裝得很是好的類,使用起來很方便!UDP是java.net.DatagramSocket..net

       127.0.0.1是迴路地址,用於測試,至關於localhost本機地址,沒有網卡,不設DNS均可以訪問,端口地址在0~65535之間,其中0~1023之間的端口是用於一些知名的網絡服務和應用,用戶的普通網絡應用程序應該使用1024以上的端口.blog

Socket通訊模型以下:

若是你們對Java Socket編程還有模糊的地方抓緊溫習(http://blog.csdn.net/shimiso/article/details/8529941),本文不在此贅述,下面咱們以最經常使用的TCP協議舉例:

服務器,使用ServerSocket監聽指定的端口,端口能夠隨意指定(因爲1024如下的端口一般屬於保留端口,在一些操做系統中不能夠隨意使用,因此建議使用大於1024的端口),等待客戶鏈接請求,客戶鏈接後,會話產生;在完成會話後,關閉鏈接。
客戶端,使用Java socket通訊對網絡上某一個服務器的某一個端口發出鏈接請求,一旦鏈接成功,打開會話;會話完成後,關閉Socket。客戶端不須要指定打開的端口,一般臨時的、動態的分配一個1024以上的端口。

TCP網絡鏈接模型:

相關文章
相關標籤/搜索