我有一个像这样创建的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。 那是什么给出了什么?
答案 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#的新手,所以可能有一种更智能的方式转换为字符串。