【问题标题】:C++ Named Pipes over network invalid name error网络上的 C++ 命名管道无效名称错误
【发布时间】:2016-12-29 12:49:06
【问题描述】:

我正在尝试通过命名管道在两台 Windows 电脑之间发送消息。 在本地调用 CreateNamedPipe 时,一切正常。如果我将主机名从"\\\\.\\pipe\\testpipename" 更改为"\\\\myHostname\\pipe\\testpipename",我会从getLastError() 得到一个ERROR_INVALID_NAME(123)

这是我的代码:

    BOOL   fConnected = FALSE;
    DWORD  dwThreadId = 0;
    HANDLE hPipe = INVALID_HANDLE_VALUE, hThread = NULL;
    LPTSTR pipeName = /*nullptr*/ TEXT("\\\\myHostname\\pipe\\testpipename");

    SECURITY_ATTRIBUTES sa = { 0 };
    SECURITY_DESCRIPTOR sd = { 0 };

    InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);

    SetSecurityDescriptorDacl(&sd, TRUE, NULL, FALSE);

    sa.bInheritHandle = false;
    sa.lpSecurityDescriptor = &sd;
    sa.nLength = sizeof(sa);

    hPipe = CreateNamedPipe(
    pipeName,                 // pipe name  
    PIPE_ACCESS_DUPLEX,       // read/write access 
    PIPE_TYPE_MESSAGE |       // message type pipe 
    PIPE_READMODE_MESSAGE |   // message-read mode 
    PIPE_WAIT,                // blocking mode 
    PIPE_UNLIMITED_INSTANCES, // max. instances  
    255,                      // output buffer size 
    255,                      // input buffer size 
    0,                        // client time-out 
    &sa);                     // default security attribute 

    if (hPipe == INVALID_HANDLE_VALUE)
    {
        cout << GetLastError();
        return -2;
    }

    cout << "Waiting for client to connect!" << endl;

    //waiting for client to connect
    fConnected = ConnectNamedPipe(hPipe, NULL) ?
        TRUE : (GetLastError() == ERROR_PIPE_CONNECTED);

    cout << "Client connected! YEAH" << endl;

我的猜测是管道名无效,但我不知道为什么。有什么想法吗?

【问题讨论】:

  • 您是否尝试过使用 IP 地址而不是主机名?
  • @user3549596 是的,出现同样的错误。
  • 可能听起来很傻,但管道名称是否正确,服务器上是否允许端口 445 入站?
  • @user3549596 出于测试目的,两台电脑上的防火墙都已完全关闭。你的意思是 pipename 是完整的字符串还是只有主机名部分?
  • 嗯,为什么不两个?这也是一些非常延伸的方法:尝试使用相同的用户名和密码设置客户端和服务器(不要忘记密码!)。然后运行这些东西。

标签: c++ ipc named-pipes


【解决方案1】:

问题解决了! 服务器和客户端的管道名称是:

服务器:"\\\\.\\pipe\\testpipe"
客户:"\\\\serverHostName\\pipe\\testpipe"

客户端也做了一些小的改动。 完整代码可以在my Github repo找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    相关资源
    最近更新 更多