您好,登錄后才能下訂單哦!
這篇文章給大家介紹C#中怎么實現一個異步傳輸字符串客戶端,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
C#異步傳輸字符串客戶端的實現與服務端類似,我們首先對TcpClient進行一個簡單的包裝,使它的使用更加方便一些,因為它是服務端的客戶,所以我們將類的名稱命名為ServerClient:
public class ServerClient { private const int BufferSize = 8192; private byte[] buffer; private TcpClient client; private NetworkStream streamToServer; private string msg = "Welcome to TraceFact.Net!"; //C#異步傳輸字符串客戶端的實現public ServerClient() { try { client = new TcpClient(); client.Connect("localhost", 8500); // 與服務器連接 } catch (Exception ex) { Console.WriteLine(ex.Message); return; } buffer = new byte[BufferSize]; //C#異步傳輸字符串客戶端的實現// 打印連接到的服務端信息 Console.WriteLine("Server Connected!{0} --> {1}", client.Client.LocalEndPoint, client.Client.RemoteEndPoint); streamToServer = client.GetStream(); } // 連續發送三條消息到服務端 public void SendMessage(string msg) { msg = String.Format("[length={0}]{1}", msg.Length, msg); for (int i = 0; i <= 2; i++) { byte[] temp = Encoding.Unicode.GetBytes(msg); // 獲得緩存 try { streamToServer.Write(temp, 0, temp.Length); // 發往服務器 Console.WriteLine("Sent: {0}", msg); } catch (Exception ex) { Console.WriteLine(ex.Message); break; } } //C#異步傳輸字符串客戶端的實現lock (streamToServer) { AsyncCallback callBack = new AsyncCallback(ReadComplete); streamToServer.BeginRead( buffer, 0, BufferSize, callBack, null); } } public void SendMessage() { SendMessage(this.msg); } // 讀取完成時的回調方法 private void ReadComplete(IAsyncResult ar) { int bytesRead; try { lock (streamToServer) { bytesRead = streamToServer.EndRead(ar); } if (bytesRead == 0) throw new Exception("讀取到0字節"); string msg = Encoding.Unicode.GetString(buffer, 0, bytesRead); Console.WriteLine("Received: {0}", msg); Array.Clear(buffer, 0, buffer.Length); // 清空緩存,避免臟讀 lock (streamToServer) { AsyncCallback callBack = new AsyncCallback(ReadComplete); streamToServer.BeginRead(buffer, 0, BufferSize, callBack, null); } } catch (Exception ex) { if(streamToServer!=null) streamToServer.Dispose(); client.Close(); Console.WriteLine(ex.Message); } } //C#異步傳輸字符串客戶端的實現}
在上面的SendMessage()方法中,我們讓它連續發送了三條同樣的消息,這么僅僅是為了測試,因為異步操作同樣會出現上面說過的:服務器將客戶端的請求拆開了的情況。最后我們在Main()方法中創建這個類型的實例,然后調用SendMessage()方法進行測試:
class Client { static void Main(string[] args) { ConsoleKey key; ServerClient client = new ServerClient(); client.SendMessage(); Console.WriteLine("\n\n輸入\"Q\"鍵退出。"); do { key = Console.ReadKey(true).Key; } while (key != ConsoleKey.Q); } }
關于C#中怎么實現一個異步傳輸字符串客戶端就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。