如何在C#.NET中基于现有代码实现从服务器持续读取数据?
实现TCP客户端持续读取服务器数据
嘿,我看你现在的代码只能从TCP服务器读取一次数据就结束了,要实现持续读取其实很简单,核心就是把读取逻辑放到循环里,同时做好资源管理和异常处理。咱们一步步来改:
原代码的问题
你的代码里stream.Read()只执行了一次,读完就直接关闭流和客户端了,所以只能拿到单次数据。要持续读取,得让读取动作重复执行,直到你主动停止或者服务器断开连接。
修改后的代码示例
我推荐用using语句来自动管理TcpClient和NetworkStream的资源,这样不用手动调用Close(),避免资源泄漏:
using (TcpClient client = new TcpClient("169.254.74.65", 7998)) using (NetworkStream stream = client.GetStream()) { Byte[] data = new Byte[1024]; String responseData = String.Empty; // 持续读取直到服务器关闭连接 while (true) { try { Int32 bytesRead = stream.Read(data, 0, data.Length); // 如果返回0,说明服务器已断开连接,退出循环 if (bytesRead == 0) { Console.WriteLine("服务器已断开连接"); break; } responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytesRead); Console.WriteLine("Received: {0}", responseData); // 可选:如果收到特定指令(比如"exit"),主动退出循环 if (responseData.Trim().Equals("exit", StringComparison.OrdinalIgnoreCase)) { Console.WriteLine("收到退出指令,停止读取"); break; } } catch (IOException ex) { Console.WriteLine("读取数据时出现网络异常: {0}", ex.Message); break; } } }
关键说明
- 循环读取:用
while(true)让读取动作重复执行,直到触发退出条件。 - 连接断开判断:
stream.Read()返回0意味着服务器已经关闭了连接,这时候我们应该退出循环。 - 异常处理:添加
IOException捕获,处理网络中断、连接异常等情况,避免程序直接崩溃。 - 资源管理:
using语句会在代码块结束时自动释放TcpClient和NetworkStream资源,比手动调用Close()更安全。 - 主动退出:可以根据业务需求添加自定义的退出条件(比如收到特定消息),让你能主动停止读取。
额外注意
如果服务器发送的不是ASCII编码的数据,记得把Encoding.ASCII改成对应的编码(比如Encoding.UTF8),避免出现乱码。
内容的提问来源于stack exchange,提问作者Sayan Sen
相关产品推荐
相关产品推荐

