C# 服务器和 C++ 客户端之间的命名管道通信
Named pipe communication between C# server and C++ client
我有一个 C# 服务器和一个 C++ 客户端。 C# 服务器工作正常,因为我使用 C# 客户端对其进行了测试,并且来自客户端的所有消息都已正确传输到服务器。但是,在实现 C++ 客户端时,我似乎 运行 遇到了某些问题。
首先,这是我的 C# 服务器:
Task.Factory.StartNew(() =>
{
NamedPipeServerStream server = new NamedPipeServerStream(name);
server.WaitForConnection();
StreamReader reader = new StreamReader(server);
Console.WriteLine("Client connected");
while (true)
{
if (reader.ReadLine() != null)
Console.WriteLine(reader.ReadLine());
}
});
name
变量作为参数传递给方法。
我的 C++ 代码如下:
HANDLE hPipe;
DWORD dwWritten;
hPipe = CreateFile(TEXT("\\.\pipe\testpipe"),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
if (hPipe != INVALID_HANDLE_VALUE)
{
WriteFile(hPipe,
"Hello Pipe\n",
12, // = length of string + terminating '[=11=]' !!!
&dwWritten,
NULL);
CloseHandle(hPipe);
}
服务器的输出如下:
[PIPE] Client connected
[PIPE]
有人有什么建议吗?也许我完全错了,因为我是管道新手。
提前致谢。
如果没有可靠地重现问题的良好 Minimal, Complete, and Verifiable example,很难诊断代码,尤其是网络代码。但是您的服务器的 C# 代码至少有一个明显的问题:
while (true)
{
if (reader.ReadLine() != null)
Console.WriteLine(reader.ReadLine());
}
在这里,您首先从流中读取一行,然后如果它不是 null
,您读取 另一 行并显示它。这意味着您将丢弃所有其他发送的行。
循环应该更像这样:
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
我不明白你的 C# 客户端是如何工作的。也许它也未正确实现,在所需行之前加上空行以平衡服务器代码中的错误。
我有一个 C# 服务器和一个 C++ 客户端。 C# 服务器工作正常,因为我使用 C# 客户端对其进行了测试,并且来自客户端的所有消息都已正确传输到服务器。但是,在实现 C++ 客户端时,我似乎 运行 遇到了某些问题。
首先,这是我的 C# 服务器:
Task.Factory.StartNew(() =>
{
NamedPipeServerStream server = new NamedPipeServerStream(name);
server.WaitForConnection();
StreamReader reader = new StreamReader(server);
Console.WriteLine("Client connected");
while (true)
{
if (reader.ReadLine() != null)
Console.WriteLine(reader.ReadLine());
}
});
name
变量作为参数传递给方法。
我的 C++ 代码如下:
HANDLE hPipe;
DWORD dwWritten;
hPipe = CreateFile(TEXT("\\.\pipe\testpipe"),
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
if (hPipe != INVALID_HANDLE_VALUE)
{
WriteFile(hPipe,
"Hello Pipe\n",
12, // = length of string + terminating '[=11=]' !!!
&dwWritten,
NULL);
CloseHandle(hPipe);
}
服务器的输出如下:
[PIPE] Client connected
[PIPE]
有人有什么建议吗?也许我完全错了,因为我是管道新手。
提前致谢。
如果没有可靠地重现问题的良好 Minimal, Complete, and Verifiable example,很难诊断代码,尤其是网络代码。但是您的服务器的 C# 代码至少有一个明显的问题:
while (true)
{
if (reader.ReadLine() != null)
Console.WriteLine(reader.ReadLine());
}
在这里,您首先从流中读取一行,然后如果它不是 null
,您读取 另一 行并显示它。这意味着您将丢弃所有其他发送的行。
循环应该更像这样:
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
我不明白你的 C# 客户端是如何工作的。也许它也未正确实现,在所需行之前加上空行以平衡服务器代码中的错误。