102 lines
1.9 KiB
C++
102 lines
1.9 KiB
C++
// CCEXPipe.cpp : 定义 DLL 应用程序的入口点。
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "CCEXPipe.h"
|
|
|
|
|
|
#ifdef _MANAGED
|
|
#pragma managed(push, off)
|
|
#endif
|
|
|
|
BOOL APIENTRY DllMain( HMODULE hModule,
|
|
DWORD ul_reason_for_call,
|
|
LPVOID lpReserved
|
|
)
|
|
{
|
|
WSADATA wsaData;
|
|
WORD wVersionRequested=MAKEWORD(2, 2);
|
|
if( 0 == WSAStartup (wVersionRequested, &wsaData))
|
|
{
|
|
;
|
|
}
|
|
LogOutToFile("Pipe Load succ");
|
|
return TRUE;
|
|
}
|
|
|
|
#ifdef _MANAGED
|
|
#pragma managed(pop)
|
|
#endif
|
|
|
|
|
|
BOOL ReadPipePacket(SOCKET rsocket, char* pcReadBuf, int lMaxSize, int& lRead)
|
|
{
|
|
lRead = 0;
|
|
int lLen = 0;
|
|
//读取长度
|
|
int lNeedRead = sizeof(lLen);
|
|
int lReadPos = 0;
|
|
while (lNeedRead > 0)
|
|
{
|
|
int lReadTemp = recv(rsocket, ((char*)&lLen)+lReadPos, lNeedRead, 0);
|
|
if(lReadTemp <= 0)
|
|
{
|
|
LogOutToFile("ReadPipePacket recv len error.[%d] [%d]", GetLastError(), lReadTemp);
|
|
return FALSE;
|
|
}
|
|
lNeedRead -= lReadTemp;
|
|
lReadPos += lReadTemp;
|
|
}
|
|
|
|
lRead = lLen;
|
|
|
|
if (lLen >= lMaxSize)
|
|
{
|
|
LogOutToFile("ReadPipePacket limit max.[%d] recv[%d]", GetLastError(), lMaxSize, lLen);
|
|
return FALSE;
|
|
}
|
|
|
|
//读取数据包
|
|
lNeedRead = lLen;
|
|
lReadPos = 0;
|
|
while (lNeedRead > 0)
|
|
{
|
|
int lReadTemp = recv(rsocket, pcReadBuf+lReadPos, lNeedRead, 0);
|
|
if(lReadTemp <= 0)
|
|
{
|
|
LogOutToFile("ReadPipePacket recv body error.[%d] [%d]", GetLastError(), lReadTemp);
|
|
return FALSE;
|
|
}
|
|
lNeedRead -= lReadTemp;
|
|
lReadPos += lReadTemp;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL SendeData(SOCKET wsocket, const char* pData, int lLen)
|
|
{
|
|
if (-1 == wsocket)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
int lSend = -1;
|
|
|
|
//向命名管道中写入数据
|
|
lSend = send(wsocket, (const char*)&lLen, sizeof(lLen), 0);
|
|
if(sizeof(lLen) != lSend)
|
|
{
|
|
LogOutToFile("写入数据长度失败,预期写入[%d],实际写入[%d]\r\n", (int)sizeof(lLen), lSend);
|
|
return FALSE;
|
|
}
|
|
|
|
lSend = send(wsocket, pData, lLen, 0);
|
|
if(lLen != lSend)
|
|
{
|
|
LogOutToFile("写入数据失败,预期写入[%d],实际写入[%d]\r\n", lLen, lSend);
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
} |