想用Mailslot实现一个简单的局域网内通信demo,
服务端代码如下://ini函数中的相关代码:
/////////////////////////////////////m_hMailslot = CreateMailslot("\\\\.\\Mailslot\\Myslot", 0, MAILSLOT_WAIT_FOREVER, NULL);
if (INVALID_HANDLE_VALUE == m_hMailslot)
{
ASSERT(FALSE);
}
else
{
AfxBeginThread(OnMailslot, this);
}// 回调函数中的代码
/////////////////////////////////////UINT OnMailslot(LPVOID lpParam)
{
CMyMailslotDlg * lpDlg = (CMyMailslotDlg *)lpParam; while(lpDlg)
{
if (lpDlg->m_hMailslot == INVALID_HANDLE_VALUE)
{
break;
} DWORD dwMsgCount = 0;
DWORD dwDataLength = 0;;
if (!GetMailslotInfo(lpDlg->m_hMailslot, // mailslot handle 
(LPDWORD) NULL,     // no maximum message size 
&dwDataLength,       // size of next message 
&dwMsgCount,            // number of messages 
(LPDWORD) NULL)            // no read time-out 
)
{
break;
}

if (dwMsgCount == 0 || dwDataLength == MAILSLOT_NO_MESSAGE)
{
Sleep(100);
continue;
} DWORD dwRead = 0;
char szBuff[400];
if (!ReadFile(lpDlg->m_hMailslot, szBuff, dwDataLength,&dwRead, NULL))
{
break;
} szBuff[dwRead] = 0;                TRACE1("Mailslot msg: %s\n", szBuff); } return 0;
}客户端代码如下: HANDLE hMailslot;

if ((hMailslot = CreateFile("\\\\*\\Mailslot\\Myslot",GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)) == INVALID_HANDLE_VALUE)
{
ASSERT(FALSE);
return;
}

DWORD dwWrite;

char szBuff[] = "I'm testing !";
DWORD dwSize = strlen(szBuff); if (WriteFile(hMailslot,szBuff, dwSize ,&dwWrite,NULL) == 0)
{
ASSERT(FALSE);
}

CloseHandle(hMailslot);
 上面的代码在主机和虚拟机系统,跑不通,求高人来指点迷津!