 今回は、LANでつながっている他のコンピュータのメールスロットにも
メッセージを発信できるように、前章のプログラムを改良します。
今回は、LANでつながっている他のコンピュータのメールスロットにも
メッセージを発信できるように、前章のプログラムを改良します。
改良といっても、ほんの少しだけ手を加えるだけです。
他のパソコンのメールスロットに送信するには、宛先を
\\相手のパソコン名\mailslot\メールスロットの名前とするだけです。Cでは、「\」は、「\\」で表す点に注意してください。
自分自身のパソコンに送信するときはコンピュータの名前を「.」(ピリオド)にするか、 実際の名前を指定します。
/* mailslot03.c */
#include <windows.h>
#include <stdio.h>
int MyWrite();
int main()
{
    char szNo[8];
    int nNo;
    BOOL bEnd = FALSE;
    while (1) {
        printf("**** MENU ****\n");
        printf("1.書き込み\n");
        printf("0.終了\n");
        printf("**************\n");
        printf("\n");
        printf("番号選択-->");
        gets(szNo);
        nNo = atoi(szNo);
        switch (nNo) {
            case 1:
                MyWrite();
                break;
            case 0:
                bEnd = TRUE;
                break;
            default:
                printf("不正な番号です\n");
                continue;
        }
        if (bEnd)
            break;
    }
    return 0;
}
int MyWrite()
{
    char szBuf[1024], szTemplate[] = "\\\\%s\\mailslot\\mymail", 
        szComp[64], szMailSlot[128];
    HANDLE hFile;
    BOOL bResult;
    DWORD dwWritten;
    printf("宛先のコンピュータ名(自分の時は'.')---");
    gets(szComp);
    wsprintf(szMailSlot, szTemplate, szComp);
    hFile = CreateFile(szMailSlot, GENERIC_WRITE,
        FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
        NULL);
    
    if (hFile == INVALID_HANDLE_VALUE) {
        printf("メールスロットがありません\n");
        return -1;
    }
    printf("書き込み-->");
    gets(szBuf);
    strcat(szBuf, "\r\n");
    bResult = WriteFile(hFile, szBuf, (int)strlen(szBuf) + 1, &dwWritten, NULL);
    if (bResult == FALSE) {
        printf("Error WriteFie\n");
        CloseHandle(hFile);
        return -2;
    }
    CloseHandle(hFile);
    return 0;
}
受ける側のプログラムは第116章で作ったものを利用します。今回も簡単でした。
Update Sep/20/2005 By Y.Kumei