日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C#異步傳輸字符串客戶端的實現(xiàn)

C#異步傳輸字符串客戶端的實現(xiàn)與服務(wù)端類似,我們首先對TcpClient進行一個簡單的包裝,使它的使用更加方便一些,因為它是服務(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#異步傳輸字符串客戶端的實現(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#異步傳輸字符串客戶端的實現(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#異步傳輸字符串客戶端的實現(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. // 讀取完成時的回調(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#異步傳輸字符串客戶端的實現(xiàn)
  78. }

在上面的SendMessage()方法中,我們讓它連續(xù)發(fā)送了三條同樣的消息,這么僅僅是為了測試,因為異步操作同樣會出現(xiàn)上面說過的:服務(wù)器將客戶端的請求拆開了的情況。最后我們在Main()方法中創(chuàng)建這個類型的實例,然后調(diào)用SendMessage()方法進行測試:

 
 
 
  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. }

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

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


當前標題:C#異步傳輸字符串客戶端的實現(xiàn)
轉(zhuǎn)載來源:http://www.dlmjj.cn/article/djojeph.html