简体   繁体   English

简单的Mailslot程序不起作用?

[英]Simple Mailslot program not working?

Using the client and server examples found here: http://www.winsocketdotnetworkprogramming.com/winsock2programming/winsock2advancedmailslot14.html Compiling them with VS2008, running the server and then "client Myslot" I keep getting "WriteFail failed with error 53." 使用在此处找到的客户端和服务器示例: http : //www.winsocketdotnetworkprogramming.com/winsock2programming/winsock2advancedmailslot14.html使用VS2008对其进行编译,先运行服务器,然后运行“客户端Myslot”,我不断收到“ WriteFail失败,错误53。” Anyone have any ideas? 有人有想法么? Links to other Mailslot examples are also welcome, thanks. 也欢迎链接到其他Mailslot示例。

Server: 服务器:

    // Server sample
#include <windows.h>
#include <stdio.h>

void main(void)
{

    HANDLE Mailslot;
    char buffer[256];
    DWORD NumberOfBytesRead;

    // Create the mailslot

    if ((Mailslot = CreateMailslot("\\\\.\\Mailslot\\Myslot", 0, MAILSLOT_WAIT_FOREVER, NULL)) == INVALID_HANDLE_VALUE)
    {
        printf("Failed to create a mailslot %d\n", GetLastError());
        return;
    } 

    // Read data from the mailslot forever!

    while(ReadFile(Mailslot, buffer, 256, &NumberOfBytesRead, NULL) != 0)
    {
        printf("%.*s\n", NumberOfBytesRead, buffer);
    }
}

Client: 客户:

// Client sample

#include <windows.h>
#include <stdio.h>

void main(int argc, char *argv[])
{
    HANDLE Mailslot;
    DWORD BytesWritten;
    CHAR ServerName[256];

    // Accept a command line argument for the server to send a message to

    if (argc < 2)
    {
        printf("Usage: client <server name>\n");
        return;
    }

    sprintf(ServerName, "\\\\%s\\Mailslot\\Myslot", argv[1]);

    if ((Mailslot = CreateFile(ServerName, GENERIC_WRITE,

        FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE)
    {
        printf("CreateFile failed with error %d\n", GetLastError());
        return;
    }

    if (WriteFile(Mailslot, "This is a test", 14, &BytesWritten, NULL) == 0)
    {
        printf("WriteFile failed with error %d\n", GetLastError());
        return;
    }

    printf("Wrote %d bytes\n", BytesWritten);
    CloseHandle(Mailslot);
}

Error 53 is ERROR_BAD_NETPATH, "The network path was not found". 错误53是ERROR_BAD_NETPATH,“未找到网络路径”。 Clearly you are using the wrong server name for the mailslot. 显然,您为邮槽使用了错误的服务器名称。 Use \\\\.\\mailslot\\blah if the server runs on the same machine as your client. 如果服务器与客户端在同一台计算机上运行,​​请使用\\\\.\\mailslot\\blah And don't forget to escape the backslash in a string: "\\\\\\\\.\\\\mailslot\\\\blah" . 并且不要忘记在字符串中使用反斜杠: "\\\\\\\\.\\\\mailslot\\\\blah"

I copied the code exactly as posted into two files, compiled them with VS2008 and they ran perfectly. 我将发布的代码完全复制到两个文件中,并使用VS2008对其进行了编译,它们运行得很好。 If your client program is compiled as client.exe, then type the following command: 如果您的客户端程序被编译为client.exe,则键入以下命令:

client .

or 要么

client <computername>

where computer name is the PC's name without the domain. 其中,计算机名是不带域的PC的名称。 You can call the API GetComputerName to retrieve the name. 您可以调用API GetComputerName来检索名称。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM