Frage

Mithilfe der client-und server-Beispiele finden Sie hier: http://www.winsocketdotnetworkprogramming.com/winsock2programming/winsock2advancedmailslot14.html Kompilieren Sie mit VS2008, auf dem der server läuft, und dann "client Myslot" ich erhalte "WriteFail fehlgeschlagen mit Fehler 53." Jemand irgendwelche Ideen?Links zu anderen Mailslot Beispiele sind auch willkommen, danke.

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);
}
War es hilfreich?

Lösung

Fehler 53 ERROR_BAD_NETPATH, "Der Netzwerkpfad wurde nicht gefunden".Klar, Sie sind mit dem falschen server-name für den mailslot.Verwenden \\.\mailslot\blah wenn der server läuft auf der gleichen Maschine wie der client.Und vergessen Sie nicht die escape-backslash in einer Zeichenkette: "\\\\.\\mailslot\\blah".

Andere Tipps

kopiert ich den Code genau wie in zwei Dateien geschrieben, so dass sie mit VS2008 kompiliert und sie lief perfekt. Wenn Ihr Client-Programm als client.exe kompiliert wird, dann geben Sie den folgenden Befehl ein:

client .

oder

client <computername>

Dabei steht Computername der Name des PC ist ohne die Domäne. Sie können die API aufrufen GetComputerName den Namen abgerufen werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top