我编写了一些使用命名管道将字符串从一个应用程序发送到另一个应用程序的代码。它一次可以正常工作,但是当客户端第二次尝试将其发送到服务器应用程序时,它会在尝试连接到客户端时冻结。
服务器代码是这样的:
static void StartServer()
{
Task.Factory.StartNew(() =>
{
var server = new NamedPipeServerStream("MyPipe");
server.WaitForConnection();
StreamReader reader = new StreamReader(server);
while (true)
{
var line = reader.ReadLine();
if (line != null)
{
System.Windows.Forms.MessageBox.Show("Data: : " + line);
}
}
});
}
客户端代码为:
private void Test()
{
using (var client = new NamedPipeClientStream("MyPipe"))
{
client.Connect();
StreamWriter writer = new StreamWriter(client);
writer.WriteLine("INCOMING:1234567");
writer.Flush();
client.Dispose();
}
}
通过跟踪代码,我可以看到服务器代码中的循环不断检查正在读取的任何行但没有找到任何行。client.Connect()
当第二次调用该Test()
方法时,客户端正在挂起。没有引发异常。
谁能看到我哪里出错了?