av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

C#異步傳輸字符串客戶端的實(shí)現(xiàn)

C#異步傳輸字符串客戶端的實(shí)現(xiàn)與服務(wù)端類似,我們首先對(duì)TcpClient進(jìn)行一個(gè)簡(jiǎn)單的包裝,使它的使用更加方便一些,因?yàn)樗欠?wù)端的客戶,所以我們將類的名稱命名為ServerClient:

 
 
 
  1. public class ServerClient {
  2. private const int BufferSize = 8192;
  3. private byte[] buffer;
  4. private TcpClient client;
  5. private NetworkStream streamToServer;
  6. private string msg = "Welcome to TraceFact.Net!";
  7.  //C#異步傳輸字符串客戶端的實(shí)現(xiàn)
  8. public ServerClient() {
  9. try {
  10. client = new TcpClient();
  11. client.Connect("localhost", 8500);  
  12. // 與服務(wù)器連接
  13. } catch (Exception ex) {
  14. Console.WriteLine(ex.Message);
  15. return;
  16. }
  17. buffer = new byte[BufferSize];
  18.  //C#異步傳輸字符串客戶端的實(shí)現(xiàn)
  19. // 打印連接到的服務(wù)端信息
  20. Console.WriteLine("Server Connected!{0} --> {1}",
  21. client.Client.LocalEndPoint,
  22.  client.Client.RemoteEndPoint);
  23. streamToServer = client.GetStream();
  24. }
  25. // 連續(xù)發(fā)送三條消息到服務(wù)端
  26. public void SendMessage(string msg) {
  27. msg = String.Format("[length={0}]{1}",
  28.  msg.Length, msg);
  29. for (int i = 0; i <= 2; i++) {
  30. byte[] temp = Encoding.Unicode.GetBytes(msg);  
  31.  // 獲得緩存
  32. try {
  33. streamToServer.Write(temp, 0, temp.Length); 
  34. // 發(fā)往服務(wù)器
  35. Console.WriteLine("Sent: {0}", msg);
  36. } catch (Exception ex) {
  37. Console.WriteLine(ex.Message);
  38. break;
  39. }
  40. }
  41.  //C#異步傳輸字符串客戶端的實(shí)現(xiàn)
  42. lock (streamToServer) {
  43. AsyncCallback callBack = 
  44. new AsyncCallback(ReadComplete);
  45. streamToServer.BeginRead(
  46. buffer, 0, BufferSize, callBack, null);
  47. }
  48. }
  49. public void SendMessage() {
  50. SendMessage(this.msg);
  51. }
  52. // 讀取完成時(shí)的回調(diào)方法
  53. private void ReadComplete(IAsyncResult ar) {
  54. int bytesRead;
  55. try {
  56. lock (streamToServer) {
  57. bytesRead = streamToServer.EndRead(ar);
  58. }
  59. if (bytesRead == 0) throw new
  60.  Exception("讀取到0字節(jié)");
  61. string msg = Encoding.Unicode.GetString(buffer, 0, bytesRead);
  62. Console.WriteLine("Received: {0}", msg);
  63. Array.Clear(buffer, 0, buffer.Length);  
  64. // 清空緩存,避免臟讀
  65. lock (streamToServer) {
  66. AsyncCallback callBack = 
  67. new AsyncCallback(ReadComplete);
  68. streamToServer.BeginRead(buffer,
  69.  0, BufferSize, callBack, null);
  70. }
  71. } catch (Exception ex) {
  72. if(streamToServer!=null)
  73. streamToServer.Dispose();
  74. client.Close();
  75. Console.WriteLine(ex.Message);
  76. }
  77. }  //C#異步傳輸字符串客戶端的實(shí)現(xiàn)
  78. }

在上面的SendMessage()方法中,我們讓它連續(xù)發(fā)送了三條同樣的消息,這么僅僅是為了測(cè)試,因?yàn)楫惒讲僮魍瑯訒?huì)出現(xiàn)上面說(shuō)過(guò)的:服務(wù)器將客戶端的請(qǐng)求拆開了的情況。最后我們?cè)贛ain()方法中創(chuàng)建這個(gè)類型的實(shí)例,然后調(diào)用SendMessage()方法進(jìn)行測(cè)試:

 
 
 
  1. class Client {
  2. static void Main(string[] args) {
  3. ConsoleKey key;
  4. ServerClient client = new ServerClient();
  5. client.SendMessage();
  6. Console.WriteLine("\n\n輸入\"Q\"鍵退出。");
  7. do {
  8. key = Console.ReadKey(true).Key;
  9. } while (key != ConsoleKey.Q);
  10. }
  11. }

是不是感覺很清爽?因?yàn)榱己玫拇a重構(gòu),使得程序在復(fù)雜程度提高的情況下依然可以在一定程度上保持良好的閱讀性。

C#異步傳輸字符串客戶端的實(shí)現(xiàn)的基本內(nèi)容就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)C#異步傳輸字符串有所幫助。


網(wǎng)站欄目:C#異步傳輸字符串客戶端的實(shí)現(xiàn)
瀏覽路徑:http://uogjgqi.cn/article/djojeph.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流