Namedpipe在发送大字符串时挂起

时间:2011-12-01 20:24:46

标签: c# java named-pipes

我有一个像这样创建的c#namedpipe服务器:

 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应用程序。 我发现,在发生挂起之后,DOES会向客户端发送内容。

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

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

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

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

2 个答案:

答案 0 :(得分:0)

呸!对我来说纯粹是愚蠢的。

似乎有什么东西悬而未决
processEvent(received);

我以为它已经到了

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

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

谢谢你们=)

答案 1 :(得分:0)

如果这对任何人都有帮助,我的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#的新手,所以可能有一种更智能的方式转换为字符串。