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);
 - // 捕获异常时退出程序
 - }
 - }
 - }
 
随后,我们在主程序中仅仅创建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#异步传输字符串服务端的实现
 - }
 
好了,服务端的实现现在就完成了。
C#异步传输字符串服务端的实现方面内容就向你介绍到这里,希望对你了解和学习C#异步传输字符串有所帮助。
【编辑推荐】