今回は、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