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

歡迎訪問 生活随笔!

生活随笔

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

C#

C# Tcp客户端

發布時間:2023/12/20 C# 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# Tcp客户端 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????? ? 今天有個童鞋向我問了一下關于C#中的TCP操作,我當時給他講了一下,感覺這個東西還是需要有代碼才能講清楚。這里我只貼異步的代碼。異步看明白了,同步自然就不用多說了。

????? ? 首先我說一下我講解的代碼的思路。

????????1.【準備好服務端】既然是客戶端,那么首先我們需要一個服務端,我的服務端已經寫好,本文暫時不講服務端代碼。

????????2.【客戶端打開連接】類似于打電話一樣,要兩個手機之間打通了才能進行對話。這里我采用的是異步連接方式,代碼如下

? ?然后哦在AsynConnect方法中進行結束連接,如下圖


????? ? 3.【接收數據】既然打通了電話。那么就可以進行交流了。這里我們在連接成功插入了一段代碼,表示開始進行數據接收操作,為了在等待接收數據的時候還能有其他操作,這里使用異步方式,如下圖


這里只是開始異步讀取數據,所以我們在AsynReceiveData方法中進行結束本次數據接收。如下圖


????? ? 4.【發送數據】打電話不能一個人說話對吧,此時我們在寫了一個客戶端向服務端發送數據請求的方法。不過這里發送我是采用的同步方式,因為數據少,發送的東西又不重要,沒必要去異步。


????? ? 5.總結一下,然后貼出整個代碼。其實沒啥說的,我下面這幾行代碼初學者都能看懂。這里面有一個比較重要的思維點就是:遠程連接打開后馬上就設置了開始異步數據接收,如果不做這一步,你不會接收到服務端的數據的。簡單點,說話的方式點:就是我要開啟了異步數據接收(BeginRead)才會正常接收到數據。還有一點就是這次的數據接收結束后,還要再次開啟異步數據接收,這樣才能正常結束到下一次的數據。

????? ? 6.以下就是整個代碼部分

/// <summary>/// TcpClient操作/// </summary>public class TcpClientBusiness{#region 自定義參數/// <summary>/// Tcp客戶端模型/// </summary>private static TcpClient tcpClient;/// <summary>/// 網絡訪問數據流/// </summary>private static NetworkStream networkStream;/// <summary>/// 返回數據/// </summary>public static List<byte[]> ResponseBytes = new List<byte[]>();/// <summary>/// 遠程服務IP地址/// </summary>public static string RemoteIp = string.Empty;/// <summary>/// 遠程服務IP地址對應端口/// </summary>public static int RemotePort = -1;/// <summary>/// 是否連接/// </summary>public static bool IsConnected = false;#endregion/// <summary>/// 打開TCP連接/// </summary>public static void ConnectToServer(){try{//初始化TCP客戶端對象tcpClient = new TcpClient();//開始連接tcpClient.BeginConnect(RemoteIp, RemotePort, new AsyncCallback(AsynConnect), tcpClient);}catch (Exception ex){VerficationOperate.WriteTextLogs("TcpClientBusiness", "ConnectToServer|異常消息:" + ex.Message.ToString());}}/// <summary>/// 異步連接/// </summary>/// <param name="iar"></param>public static void AsynConnect(IAsyncResult iar){try{//連接成功tcpClient.EndConnect(iar);//連接成功標志IsConnected = true;networkStream = tcpClient.GetStream();byte[] TempBytes = new byte[1024];//開始異步讀取返回數據networkStream.BeginRead(TempBytes, 0, TempBytes.Length, new AsyncCallback(AsynReceiveData), TempBytes);}catch (Exception ex){VerficationOperate.WriteTextLogs("TcpClientBusiness", "AsynConnect|異常消息:" + ex.Message.ToString());}}/// <summary>/// 發送數據/// <param name="SendBytes">需要發送的數據</param>/// </summary>public static void SendData(byte[] SendBytes){try{if (networkStream.CanWrite && SendBytes != null && SendBytes.Length > 0){//發送數據networkStream.Write(SendBytes, 0, SendBytes.Length);networkStream.Flush();}}catch (Exception ex){if (tcpClient != null){tcpClient.Close();//關閉連接后馬上更新連接狀態標志IsConnected = false;}VerficationOperate.WriteTextLogs("TcpClientBusiness", "SendData|異常消息:" + ex.Message.ToString());}}/// <summary>/// 異步接受數據/// </summary>/// <param name="iar"></param>public static void AsynReceiveData(IAsyncResult iar){byte[] CurrentBytes = (byte[])iar.AsyncState;try{//結束了本次數據接收int num = networkStream.EndRead(iar);//這里展示結果為InfoModel的CurrBytes屬性,將返回的數據添加至返回數據容器中ResponseBytes.Add(CurrentBytes);//處理結果后馬上啟動數據異步讀取【目前我每條接收的字節數據長度不會超過1024】byte[] NewBytes = new byte[1024];networkStream.BeginRead(NewBytes, 0, NewBytes.Length, new AsyncCallback(AsynReceiveData), NewBytes);}catch (Exception ex){VerficationOperate.WriteTextLogs("TcpClientBusiness", "AsynReceiveData|異常消息:" + ex.Message.ToString());}}}

強調以下,代碼沒有測試,不過直接復制上去肯定能用,不能用你來砍我。這個僅給初學者提供參考,至于TCP服務端代碼,看看下次有空的話補上。

總結

以上是生活随笔為你收集整理的C# Tcp客户端的全部內容,希望文章能夠幫你解決所遇到的問題。

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