日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

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

新聞中心

這里有您想知道的互聯網營銷解決方案
C#異步傳輸字符串客戶端的實現

C#異步傳輸字符串客戶端的實現與服務端類似,我們首先對TcpClient進行一個簡單的包裝,使它的使用更加方便一些,因為它是服務端的客戶,所以我們將類的名稱命名為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#異步傳輸字符串客戶端的實現
  8. public ServerClient() {
  9. try {
  10. client = new TcpClient();
  11. client.Connect("localhost", 8500);  
  12. // 與服務器連接
  13. } catch (Exception ex) {
  14. Console.WriteLine(ex.Message);
  15. return;
  16. }
  17. buffer = new byte[BufferSize];
  18.  //C#異步傳輸字符串客戶端的實現
  19. // 打印連接到的服務端信息
  20. Console.WriteLine("Server Connected!{0} --> {1}",
  21. client.Client.LocalEndPoint,
  22.  client.Client.RemoteEndPoint);
  23. streamToServer = client.GetStream();
  24. }
  25. // 連續(xù)發(fā)送三條消息到服務端
  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ā)往服務器
  35. Console.WriteLine("Sent: {0}", msg);
  36. } catch (Exception ex) {
  37. Console.WriteLine(ex.Message);
  38. break;
  39. }
  40. }
  41.  //C#異步傳輸字符串客戶端的實現
  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. // 讀取完成時的回調方法
  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#異步傳輸字符串客戶端的實現
  78. }

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

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

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


網頁標題:C#異步傳輸字符串客戶端的實現
標題來源:http://www.5511xx.com/article/djojeph.html