【发布时间】: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