2010-03-14 4 views
0

Использование примеров клиентов и серверов, найденных здесь: http://www.winsocketdotnetworkprogramming.com/winsock2programming/winsock2advancedmailslot14.html Компиляция их с VS2008, запуск сервера, а затем «клиент Myslot». Я продолжаю получать «WriteFail с ошибкой 53». У кого-нибудь есть идеи? Спасибо за ссылки на другие примеры Mailslot.Простая программа Mailslot не работает?

Сервер:

// 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 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); 
} 

ответ

1

Ошибка 53 ERROR_BAD_NETPATH, "сетевой путь не найден". Очевидно, что вы используете неправильное имя сервера для почтового ящика. Используйте \\.\mailslot\blah, если сервер работает на том же компьютере, что и ваш клиент. И не забывайте избегать обратной косой черты в строке: "\\\\.\\mailslot\\blah".

+0

Где вы нашли объяснение ошибки? Использование \\. \ Mailslot \ myslot дает мне 161 сейчас. – Shawn

+0

Любая комбинация кавычек/обратных косых черт по-прежнему возвращает ошибку 161. – Shawn

+0

Ах, новый код ошибки. 161 = ERROR_BAD_PATHNAME. Я не понимаю, что вы здесь делаете. –

1

Я скопировал код точно как отправленный в два файла, скомпилировал их с VS2008, и они отлично работали. Если ваша клиентская программа скомпилирована как client.exe, затем введите следующую команду:

client . 

или

client <computername> 

где имя компьютера имя компьютера без домена. Вы можете вызвать API GetComputerName для получения имени.

Смежные вопросы