You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:10:08