fast/CCEXPipe/CCEXPipe.cpp
2025-01-20 10:30:01 +08:00

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