【问题标题】:Namedpipe hangs when sending large string发送大字符串时命名管道挂起
【发布时间】:2011-12-01 20:24:45
【问题描述】:

我有一个像这样创建的 c# 命名管道服务器:

 NamedPipeServerStream pipeServer = new NamedPipeServerStream(IVConstants.PIPENAME, PipeDirection.InOut);
 pipeServer.WaitForConnection();
 pipeWriter = new StreamWriter(pipeServer);
 pipeWriter.AutoFlush = true;

  try
  {
     pipeWriter.WriteLine("You are Connected!!!");
  }
  catch (IOException e)
  {
     Console.WriteLine("ERROR: {0}", e.Message);
  }

写出像上面这样的小字符串没有问题。 但是,当我开始输出巨大的字符串(例如 1500 个字符)时,管道会挂起并一直挂起,直到我杀死它试图向其发送内容的客户端。客户端是一个java应用程序。 我看到它确实向客户端发送了东西,之后就会发生挂起。

客户端是一个 Java 应用程序接收这个:

RandomAccessFile pipe = new RandomAccessFile("\\\\.\\pipe\\mypipe", "rw");

while(true)
{                   
  String received = pipe.readLine();
  processEvent(received);
  System.out.println("Response: " + received );
}

客户端没有抛出异常,我可以在 readline() 之后看到 System.out。 那么是什么给出的呢?

【问题讨论】:

  • 客户端看到的是整个 1500 个字符的字符串,还是只是其中的一部分?
  • 管道 无法真正挂起。客户端代码或服务器代码是否挂起?如果是客户端,那是因为你已经完成了while(true),它正在等待下一行数据。
  • 其实我认为是客户端挂了 pipe.readLine();请参阅编辑。
  • 您能否发布将字符串写入管道的服务器代码,或者服务器主循环?
  • 1500 个字符的字符串中是否有换行符?也就是说,你打电话给WriteLine()还是Write()

标签: c# java named-pipes


【解决方案1】:

呸!纯粹是我的愚蠢。 好像有什么东西挂在里面

processEvent(received);

我还以为是到了

System.out.println("Response: " + received );

但事实并非如此。 processEvent(...) 中有一个重复的System.out.println("Response: " + received );,因此我很困惑。 毕竟它与命名管道无关。

谢谢大家=)

【讨论】:

    【解决方案2】:

    如果这可能对任何人有帮助,我的 C# 管道服务器挂起,因为我试图发送一个 char 数组。我必须将其转换为字符串。

    这失败了:

    char[] buf = new char[1024];
    // (move stuff to buf...)
    var pipeServer = new NamedPipeServerStream(...);
    StreamWriter writer = new StreamWriter(pipeServer);
    writer.WriteLine(buf);    // hangs if char[]
    

    这行得通:

    string str = "";
    for (int i = 0; buf[i] != '\0' && i < buf.Length; i++)
        str = str + Convert.ToChar(buf[i]);
    writer.WriteLine(str);
    

    我是 C# 新手,所以可能有一种更聪明的方式来转换为字符串。

    【讨论】:

      猜你喜欢
      • 2013-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多