C#异步传输字符串服务端的实现

开发 后端
C#异步传输字符串服务端的实现是如何的呢?C#异步传输字符串服务端的实现的实例具体的操作是什么呢?那么本文就向你介绍这方面的内容。

C#异步传输字符串服务端的实现当程序越来越复杂的时候,就需要越来越高的抽象,所以从现在起我们不再把所有的代码全部都扔进Main()里,这次我创建了一个RemoteClient类,它对于服务端获取到的TcpClient进行了一个包装:

C#异步传输字符串服务端的实现实例:

  1. public class RemoteClient {  
  2. private TcpClient client;  
  3. private NetworkStream streamToClient;  
  4. private const int BufferSize = 8192;  
  5. private byte[] buffer;  
  6. private RequestHandler handler;  
  7.  //C#异步传输字符串服务端的实现
  8. public RemoteClient(TcpClient client) {  
  9. this.client = client;  
  10.  
  11. // 打印连接到的客户端信息  
  12. Console.WriteLine("\nClient Connected!{0} <-- {1}",  
  13. client.Client.LocalEndPoint,  
  14.  client.Client.RemoteEndPoint);  
  15.  
  16. // 获得流  
  17. streamToClient = client.GetStream();  
  18. buffer = new byte[BufferSize];  
  19.  
  20. // 设置RequestHandler  
  21. handler = new RequestHandler();  
  22.  
  23. // 在构造函数中就开始准备读取  
  24. AsyncCallback callBack =   
  25. new AsyncCallback(ReadComplete);  
  26. streamToClient.BeginRead(buffer,   
  27. 0, BufferSize, callBack, null);  
  28. }  
  29.  
  30. // 再读取完成时进行回调  
  31. private void ReadComplete(IAsyncResult ar) {  
  32. int bytesRead = 0;  
  33. try {  
  34. lock (streamToClient) {  
  35. bytesRead = streamToClient.EndRead(ar);  
  36. Console.WriteLine("Reading data, {0} bytes ...", bytesRead);  
  37. }  
  38. if (bytesRead == 0) throw new Exception("读取到0字节");  
  39.  //C#异步传输字符串服务端的实现
  40. string msg = Encoding.Unicode.GetString(buffer, 0, bytesRead);  
  41. Array.Clear(buffer,0,buffer.Length);  
  42. // 清空缓存,避免脏读  
  43.  
  44. string[] msgArray = handler.GetActualString(msg);   
  45.   // 获取实际的字符串  
  46.  
  47. // 遍历获得到的字符串  
  48. foreach (string m in msgArray) {  
  49. Console.WriteLine("Received: {0}", m);  
  50. string back = m.ToUpper();  
  51.  
  52. // 将得到的字符串改为大写并重新发送  
  53. byte[] temp = Encoding.Unicode.GetBytes(back);  
  54. streamToClient.Write(temp, 0, temp.Length);  
  55. streamToClient.Flush();  
  56. Console.WriteLine("Sent: {0}", back);  
  57. }     //C#异步传输字符串服务端的实现
  58.  
  59. // 再次调用BeginRead(),完成时调用自身,形成无限循环  
  60. lock (streamToClient) {  
  61. AsyncCallback callBack =  
  62.  new AsyncCallback(ReadComplete);  
  63. streamToClient.BeginRead(buffer,   
  64. 0, BufferSize, callBack, null);  
  65. }  
  66. catch(Exception ex) {  
  67. if(streamToClient!=null)  
  68. streamToClient.Dispose();  
  69. client.Close();  
  70. Console.WriteLine(ex.Message);    
  71. // 捕获异常时退出程序    
  72. }  
  73. }  
  74. }  

随后,我们在主程序中仅仅创建TcpListener类型实例,由于RemoteClient类在构造函数中已经完成了初始化的工作,所以我们在下面的while循环中我们甚至不需要调用任何方法:

  1. class Server {  
  2. static void Main(string[] args) {  
  3. Console.WriteLine("Server is running ... ");  
  4. IPAddress ip = new IPAddress(new byte[] { 127, 0, 0, 1 });  
  5. TcpListener listener = new TcpListener(ip, 8500);  
  6.  
  7. listener.Start();   // 开始侦听  
  8. Console.WriteLine("Start Listening ...");  
  9.  
  10. while (true) {  
  11. // 获取一个连接,同步方法,在此处中断  
  12. TcpClient client = listener.AcceptTcpClient();    
  13. RemoteClient wapper = new RemoteClient(client);  
  14. }  
  15. }  //C#异步传输字符串服务端的实现

好了,服务端的实现现在就完成了。

C#异步传输字符串服务端的实现方面内容就向你介绍到这里,希望对你了解和学习C#异步传输字符串有所帮助。

【编辑推荐】

  1. 委托实现C#异步调用浅析
  2. 浅析C#中异步和多线程的区别
  3. C# Socket通信三大问题详解
  4. C#异步调用四大方法详解
  5. C#网络编程消息发送问题浅析
责任编辑:仲衡 来源: 博客园
相关推荐

2009-08-21 16:27:44

C#服务端程序

2009-08-21 14:33:15

C#异步传输字符串

2009-08-21 16:37:54

C#客户端程序

2009-08-21 15:36:41

服务端与客户端

2009-08-21 15:54:40

服务端与客户端

2009-08-21 15:22:56

端口侦听

2009-08-11 10:26:49

C#算法C#字符串反转

2009-09-02 16:21:20

C#字符串

2009-08-07 14:22:56

C#字符串搜索

2009-08-24 17:06:37

C#字符串

2009-08-06 16:01:09

C#字符串函数大全

2009-08-07 14:34:33

C#模式字符串

2009-08-26 13:24:54

C#字符串

2009-08-24 13:04:44

操作步骤C#字符串

2009-08-07 14:15:21

C#字符串分割

2009-08-07 13:50:11

C#字符串

2009-08-21 16:14:52

服务端与客户端通信

2009-08-21 15:59:22

服务端与客户端通信

2009-08-07 14:46:59

C#匹配字符串

2009-08-06 17:24:08

C#字符串
点赞
收藏

51CTO技术栈公众号