日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

浅析C#基于TCP协议的SCOKET通信

發布時間:2025/3/17 C# 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅析C#基于TCP协议的SCOKET通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

TCP協議是一個基本的網絡協議,基本上所有的網絡服務都是基于TCP協議的,如HTTP,FTP等等,所以要了解網絡編程就必須了解基于TCP協議的編程。然而TCP協議是一個龐雜的體系,要徹底的弄清楚它的實現不是一天兩天的功夫,所幸的是在。net framework環境下,我們不必要去追究TCP協議底層的實現,一樣可以很方便的編寫出基于TCP協議進行網絡通訊的程序。

C#基于TCP協議的網絡通訊

??? 要進行C#基于TCP協議的網絡通訊,首先必須建立同遠程主機的連接,連接地址通常包括兩部分——主機名和端口,如www.yesky.com:80中, www.yesky.com就是主機名,80指主機的80端口,當然,主機名也可以用IP地址代替。當連接建立之后,就可以使用這個連接去發送和接收數據包,TCP協議的作用就是保證這些數據包能到達終點并且能按照正確的順序組裝起來。

??? 在。net framework的類庫(Class Library)中,提供了兩個用于TCP網絡通訊的類,分別是TcpClient和TcpListener.由其英文意義顯而易見,TcpClient 類是基于TCP協議的客戶端類,而TcpListener是服務器端,監聽(Listen)客戶端傳來的連接請求。TcpClient類通過TCP協議與服務器進行通訊并獲取信息,它的內部封裝了一個Socket類的實例,這個Socket對象被用來使用TCP協議向服務器請求和獲取數據。因為與遠程主機的交互是以數據流的形式出現的,所以傳輸的數據可以使用。net framework中流處理技術讀寫。在我們下邊的例子中,你可以看到使用NetworkStream類操作數據流的方法。

??? 在下面的例子中,我們將建立一個時間服務器,包括服務器端程序和客戶端程序。服務器端監聽客戶端的連接請求,建立連接以后向客戶端發送當前的系統時間。

??? 先運行服務器端程序,下面截圖顯示了服務器端程序運行的狀況:

??? 然后運行客戶端程序,客戶端首先發送連接請求到服務器端,服務器端回應后發送當前時間到客戶端,這是客戶端程序的截圖:

??? 發送完成后,服務器端繼續等待下一次連接:

??? 通過這個例子我們可以了解TcpClient類的基本用法,要使用這個類,必須使用System.Net.Socket命名空間,本例用到的三個命名空間如下:

  • using?System; ?
  • using?System.Net.Sockets; ?
  • using?System.Text; ?
  • //從字節數組中獲取字符串時使用該命名空間中的類 ?
  • //首先討論一下客戶端程序,開始我們必須初始化一個TcpClient類的實例: ?
  • ?
  • TcpClient?client?=?new?TcpClient(hostName,?portNum); ?
  • //然后使用TcpClient類的GetStream()方法獲取數據流, 并且用它初始化一個NetworkStream類的實例: ?
  • ?
  • NetworkStream?ns?=?client.GetStream();?
  • ??? 注意,當使用主機名和端口號初始化TcpClient類的實例時,直到跟服務器建立了連接,這個實例才算真正建立,程序才能往下執行。如果因為網絡不通,服務器不存在,服務器端口未開放等等原因而不能連接,程序將拋出異常并且中斷執行。

    ??? 建立數據流之后,我們可以使用NetworkStream類的Read()方法從流中讀取數據,使用Write()方法向流中寫入數據。讀取數據時,首先應該建立一個緩沖區,具體的說,就是建立一個byte型的數組用來存放從流中讀取的數據。Read()方法的原型描述如下:

  • public?override?int?Read(in?byte[]?buffer,int?offset,int?size)?
  • ??? buffer是緩沖數組,offset是數據(字節流)在緩沖數組中存放的開始位置,size是讀取的字節數目,返回值是讀取的字節數。在本例中,簡單地使用該方法來讀取服務器反饋的信息:

  • byte[]?bytes?=?new?byte[1024];//建立緩沖區 ?
  • int?bytesRead?=?ns.Read(bytes,?0,?bytes.Length);//讀取字節流 ?
  • // 然后顯示到屏幕上: ?
  • Console.WriteLine(Encoding.ASCII.GetString(bytes,0,bytesRead)); ?
  • //最后不要忘記關閉連接: ?
  • ?
  • client.Close();?
  • ??? 以上介紹C#基于TCP協議的網絡通訊。

    總結

    以上是生活随笔為你收集整理的浅析C#基于TCP协议的SCOKET通信的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。