大果子你说谁呢 2023-10-20 16:43 采纳率: 35.7%
浏览 5
已结题

c# 客户端中读取文件转成list怎么存入protobuf ,再发送给grpc服务,grpc服务经过解析再返回给客户端

c# 客户端中读取文件转成list怎么存入protobuf ,再发送给grpc服务,grpc服务经过解析再返回给客户端

 private void btnSearch_Click(object sender, RoutedEventArgs e)
        {
        string[] datStr = File.ReadAllLines(LocalDestinationFolder + "\\" + "xxx.dat");//largeBytes
                var lists = new List<List<string>>();//lists
                string tmpStr = string.Empty;//marker
                var tmpLst = new List<string>();//tmpLst
                int removelengh = 6;
                foreach (var datstr in datStr)
                {
                    if (datstr == tmpStr)
                    {
                        lists.Add(tmpLst);
                        tmpLst = new List<string>();
                    }
                    else
                    {
                        tmpLst.Add(datstr);
                    }
                }
                lists.Add(tmpLst);
                }
protobuf定义
message Filedata{
  string TEXT = 1;
  string CODE = 2;
  string DIR = 3;
  string TIME = 4;
}
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-21 04:21
    关注

    【以下回答由 GPT 生成】

    private void btnSearch_Click(object sender, RoutedEventArgs e)
    {
        // 读取文件内容
        string[] datStr = File.ReadAllLines(LocalDestinationFolder + "\\" + "xxx.dat");
    
        // 构建要发送的消息列表
        var dataList = new List<FileData>();
    
        // 将读取的文件内容转换为列表
        var tmpList = new List<string>();
        foreach (var line in datStr)
        {
            if (line.StartsWith("==="))
            {
                if (tmpList.Count > 0)
                {
                    var fileData = new FileData
                    {
                        TEXT = tmpList[0],
                        CODE = tmpList[1],
                        DIR = tmpList[2],
                        TIME = tmpList[3]
                    };
                    dataList.Add(fileData);
                    tmpList.Clear();
                }
            }
            else
            {
                tmpList.Add(line);
            }
        }
    
        // 创建 gRPC 通道
        var channel = new Channel("localhost:5000", ChannelCredentials.Insecure);
    
        // 创建 gRPC 客户端
        var client = new MyService.MyServiceClient(channel);
    
        // 封装要发送的消息
        var request = new MyRequest
        {
            FileDataList = dataList
        };
    
        // 发送消息给服务器并等待响应
        var response = client.MyMethod(request);
    
        // 解析服务器返回的结果
        var result = response.Result;
    
        // 处理结果...
    }
    

    在上述代码中,思路是先读取文件内容并将其转换为列表。然后,根据Protobuf的定义将列表的每个元素转换为Filedata消息,并存入一个dataList列表中。接下来,使用gRPC客户端将这个dataList发送给服务器,并等待服务器的响应。最后,根据服务器返回的结果进行后续处理。

    请根据实际情况修改以下部分以适应您的代码: - LocalDestinationFolder + "\\" + "xxx.dat" 部分替换成您要读取的文件路径。 - "localhost:5000" 替换成服务器的地址和端口。 - MyServiceMyMethod 替换成实际的gRPC服务和方法名称。

    另外,为了使用Protobuf,请确保安装了gRPC和Google.Protobuf的NuGet包。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月24日
  • 创建了问题 10月20日

悬赏问题

  • ¥20 校园二手交易小程序搭建
  • ¥15 请问在ubuntu用conda创建环境报错怎么能解决
  • ¥15 STM32CubeMX/proteus按键控制指示灯颜色切换
  • ¥20 python,计算区位熵和扩张指数
  • ¥15 Python环境配置
  • ¥15 大四学生的困惑,有偿提问!
  • ¥15 解决页面无法编入索引:被“noindex”标签排除的问题?
  • ¥15 arduino测量电阻
  • ¥15 快手uid转快手号谁能解决 需要开发
  • ¥15 iis部署Django时css不生效,来个真人,ai不好使