C#socket之TCP开发详解(一)
文章目錄
- C#socket開發詳解(一)
- 簡介:
- 預備知識:
- 相關概念梳理:
- 1、什么是socket?
- 2、什么是TCP/IP、UDP?
- 3、socket與TCP/IP、UDP的關系?
- 4、TCP與UDP的比較
- 5、從編程的角度來理解開發TCP與UDP的區別
C#socket開發詳解(一)
簡介:
因為項目中有用到SOCKET 通訊,搭建一個計算的服務引擎集中處理數據(Socket Server 端),同時連多個數據采集設備(Socket Client 端)。應為Demo 程序中是C#給出的,為了更好的了解Demo程序,所以將C#socket開發技術回顧一番。事實上,Socket 應用場合有很多,該技術也是必須要掌握的。
預備知識:
1、C#語言特性的了解。包括語法、面向對象的程序設計(屬性和類、對象等概念的理解)、多線程、委托事件、接口的理解等等。
2、需要一定的windows程序設計基礎。
3、了解Socket通訊的特性,及一般步驟。
相關概念梳理:
一、在網絡通訊有兩種方式(TCP和UDP)
1、什么是socket?
socket(也叫套接字)最初是在Unix系統上開發的網絡通信的接口。后來微軟等公司將它移植到了windows下。
在設計模式中,Socket其實就是一個門面模式,它把復雜的TCP/IP協議族隱藏在Socket接口后面,對用戶來說,一組簡單的接口就是全部,讓Socket去組織數據,以符合指定的協議。
2、什么是TCP/IP、UDP?
- TCP/IP(Transmission Control Protocol/Internet
Protocol)即傳輸控制協議/網間協議,是一個工業標準的協議集,它是為廣域網(WANs)設計的。 - UDP(User Data Protocol,用戶數據報協議)是與TCP相對應的協議。它是屬于TCP/IP協議族中的一種。
3、socket與TCP/IP、UDP的關系?
Socket是應用層與TCP/IP協議族通信的中間軟件抽象層,它是一組接口。
對于軟件開發者而言,socket可以這樣理解:
它就是支持網絡通信的一個函數庫,里面包括大量的函數和相應的數據結構。程序開發人員可以通過閱讀相關的函數文檔,了解函數的使用方法,進行網絡的編程。
兩種形式的socket:
流式套接字,對應與TCP協議。
數據報套接字,對應與UDP協議。
4、TCP與UDP的比較
4.1 TCP 定義:
TCP(TransmissionControl Protocol)**傳輸控制協議。**4.2 UDP定義:
UDP(User DatagramProtocol)用戶數據報協議4.3TCP特點:
是一種可靠的、面向連接的協議(eg:打電話)、傳輸效率低全雙工通信(發送緩存&接收緩存)、面向字節流。使用TCP的應用:Web瀏覽器;電子郵件、文件傳輸程序。
4.4UDP特點:
不可靠的、無連接的服務,傳輸效率高(發送前時延小),一對一、一對多、多對一、多對多、面向報文,盡最大努力服務,無擁塞控制。使用UDP的應用:域名系統 (DNS);視頻流;IP語音(VoIP)。
4.4、TCP與UDP基本區別
4.4.1、TCP面向連接(如打電話要先撥號建立連接)。UDP是無連接的,即發送數據之前不需要建立連接。
4.4.2、對系統資源的要求(TCP較多,UDP少)。TCP需要建立專用的通信通道,還需要校驗數據等,因此需求的系統資源較大。
4.4.3、TCP保證數據正確性,TCP丟包會自動重傳,UDP可能丟包,丟包后不會自動重傳。TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道。
4.4.4、TCP保證數據傳輸有序,UDP不保證。 消息在傳輸過程中可能會亂序,后發送的消息可能會先到達,TCP會對其進行重排序,UDP不會。
4.4.5、TCP面向字節流,實際上是TCP把數據看成一連串無結構的字節流。UDP是面向報文的
4.4.6、UDP沒有擁塞控制,因此網絡出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如IP電話,實時視頻會議等)
4.4.7、每一條TCP連接只能是點到點的。UDP支持一對一,一對多,多對一和多對多的交互通信。
4.4.8、TCP首部開銷20字節。UDP的首部開銷小,只有8個字節
5、從編程的角度來理解開發TCP與UDP的區別
不管是何種編程語言去實現TCP/UDP網絡編程, 過程不外乎如下:
TCP編程的服務器端一般步驟是:
1、創建一個socket,用函數socket()。
2、設置socket屬性。
3、綁定本機的IP地址、端口等信息到socket上,用函數bind()。
4、開啟監聽,用函數listen()。
5、接收客戶端上來的連接,用函數accept()。
6、通過accept()返回相應客戶端的socket建立專用的通信通道。
7、收發數據,用函數send()和recv(),或者read()和write()。
8、關閉網絡連接。
9、關閉監聽。
TCP編程的客戶端一般步驟是:
1、創建一個socket,用函數socket()。
2、設置socket屬性。
3、設置要連接的對方的IP地址和端口等屬性。
4、連接服務器,用函數connect()。
5、收發數據,用函數send()和recv(),或者read()和write()。
6、關閉網絡連接。
UDP編程的服務器端一般步驟是:
1、創建一個socket,用函數socket()。
2、設置socket屬性。
3、綁定IP地址、端口等信息到socket上,用函數bind()。
4、循環接收數據,用函數recvfrom()。
5、關閉網絡連接。
UDP編程的客戶端一般步驟是:
1、創建一個socket,用函數socket()。
2、設置socket屬性。
4、設置對方的IP地址和端口等屬性。
5、發送數據,用函數sendto()。
6、關閉網絡連接。
總結
以上是生活随笔為你收集整理的C#socket之TCP开发详解(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#、C++、JAVA中虚函数和抽象函数
- 下一篇: C#Socket开发TCP详解(二)