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

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

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

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

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

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

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

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

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

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-21 15:59:22

服务端与客户端通信

2009-08-21 16:14:52

服务端与客户端通信

2009-08-07 14:46:59

C#匹配字符串

2009-08-26 13:24:54

C#字符串

2009-08-06 16:01:09

C#字符串函数大全

2009-08-07 14:34:33

C#模式字符串

2009-08-07 14:15:21

C#字符串分割

2009-08-07 14:22:56

C#字符串搜索

2009-08-07 13:50:11

C#字符串

2009-08-24 13:04:44

操作步骤C#字符串

2009-08-24 17:06:37

C#字符串

2009-08-21 15:06:09

C#连接字符串
点赞
收藏

51CTO技术栈公众号