|
@@ -75,6 +75,7 @@ DWORD WINAPI CSATTCPServer::_WorkerThread(LPVOID lpParam)
|
|
// 如果收到的是退出标志,则直接退出
|
|
// 如果收到的是退出标志,则直接退出
|
|
if ( EXIT_CODE==(DWORD)pSocketContext )
|
|
if ( EXIT_CODE==(DWORD)pSocketContext )
|
|
{
|
|
{
|
|
|
|
+ pIOCPModel->_ShowMessage(_T("收到的是退出标志,则直接退出,ID: %d."),nThreadNo);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -224,7 +225,7 @@ bool CSATTCPServer::Start(unsigned int port)
|
|
// 开始发送系统退出消息,退出完成端口和线程资源
|
|
// 开始发送系统退出消息,退出完成端口和线程资源
|
|
void CSATTCPServer::Stop()
|
|
void CSATTCPServer::Stop()
|
|
{
|
|
{
|
|
- if( m_pListenContext!=NULL && m_pListenContext->m_Socket!=INVALID_SOCKET )
|
|
|
|
|
|
+ if( m_pListenContext != NULL && m_pListenContext->m_Socket != INVALID_SOCKET )
|
|
{
|
|
{
|
|
// 激活关闭消息通知
|
|
// 激活关闭消息通知
|
|
SetEvent(m_hShutdownEvent);
|
|
SetEvent(m_hShutdownEvent);
|
|
@@ -430,6 +431,9 @@ void CSATTCPServer::_DeInitialize()
|
|
// 关闭IOCP句柄
|
|
// 关闭IOCP句柄
|
|
RELEASE_HANDLE(m_hIOCompletionPort);
|
|
RELEASE_HANDLE(m_hIOCompletionPort);
|
|
|
|
|
|
|
|
+ // 先关闭端口;
|
|
|
|
+ RELEASE_SOCKET( m_pListenContext->m_Socket );
|
|
|
|
+
|
|
// 关闭监听Socket
|
|
// 关闭监听Socket
|
|
RELEASE(m_pListenContext);
|
|
RELEASE(m_pListenContext);
|
|
|
|
|
|
@@ -708,12 +712,16 @@ void CSATTCPServer::_ShowMessage(const CString szFormat,...) const
|
|
strMessage.FormatV(szFormat,arglist);
|
|
strMessage.FormatV(szFormat,arglist);
|
|
va_end(arglist);
|
|
va_end(arglist);
|
|
|
|
|
|
-// Global::WriteTextLog(strMessage);
|
|
|
|
|
|
+ Global::WriteTextLog(strMessage);
|
|
}
|
|
}
|
|
|
|
|
|
#define PAK_LEN sizeof(SATProtocol::DataHeader)
|
|
#define PAK_LEN sizeof(SATProtocol::DataHeader)
|
|
void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT* pIoContext)
|
|
void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONTEXT* pIoContext)
|
|
{
|
|
{
|
|
|
|
+#ifdef _DEBUG
|
|
|
|
+ OutputDebugString("有数据返回\n");
|
|
|
|
+#endif
|
|
|
|
+ Global::WriteTextLog("有数据返回");
|
|
// 小于包头;
|
|
// 小于包头;
|
|
SATProtocol::DataHeader* phead = NULL;
|
|
SATProtocol::DataHeader* phead = NULL;
|
|
if (pSocketContext->lastData.size() == 0)
|
|
if (pSocketContext->lastData.size() == 0)
|
|
@@ -722,6 +730,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
|
|
if (PAK_LEN > pIoContext->m_Overlapped.InternalHigh)
|
|
if (PAK_LEN > pIoContext->m_Overlapped.InternalHigh)
|
|
{
|
|
{
|
|
OutputDebugString("A:不足包头;\n");
|
|
OutputDebugString("A:不足包头;\n");
|
|
|
|
+ Global::WriteTextLog("A:不足包头");
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, pIoContext->m_Overlapped.InternalHigh);
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, pIoContext->m_Overlapped.InternalHigh);
|
|
}
|
|
}
|
|
else
|
|
else
|
|
@@ -731,6 +740,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
|
|
if ( !CheckDataHeader(phead) )
|
|
if ( !CheckDataHeader(phead) )
|
|
{
|
|
{
|
|
OutputDebugString("A:包头损坏;\n");
|
|
OutputDebugString("A:包头损坏;\n");
|
|
|
|
+ Global::WriteTextLog("A:包头损坏");
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -738,18 +748,21 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
|
|
if (phead->len == pIoContext->m_Overlapped.InternalHigh)
|
|
if (phead->len == pIoContext->m_Overlapped.InternalHigh)
|
|
{
|
|
{
|
|
OutputDebugString("A:完整的包;\n");
|
|
OutputDebugString("A:完整的包;\n");
|
|
|
|
+ Global::WriteTextLog("A:完整的包");
|
|
_TaskProcess(pIoContext, (SATProtocol::Package*)pIoContext->m_wsaBuf.buf);
|
|
_TaskProcess(pIoContext, (SATProtocol::Package*)pIoContext->m_wsaBuf.buf);
|
|
}
|
|
}
|
|
// 小包;
|
|
// 小包;
|
|
else if (phead->len > pIoContext->m_Overlapped.InternalHigh)
|
|
else if (phead->len > pIoContext->m_Overlapped.InternalHigh)
|
|
{
|
|
{
|
|
OutputDebugString("A:小包;\n");
|
|
OutputDebugString("A:小包;\n");
|
|
|
|
+ Global::WriteTextLog("A:小包");
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, pIoContext->m_Overlapped.InternalHigh);
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, pIoContext->m_Overlapped.InternalHigh);
|
|
}
|
|
}
|
|
// 超包;
|
|
// 超包;
|
|
else if (phead->len < pIoContext->m_Overlapped.InternalHigh)
|
|
else if (phead->len < pIoContext->m_Overlapped.InternalHigh)
|
|
{
|
|
{
|
|
OutputDebugString("A:超包;\n");
|
|
OutputDebugString("A:超包;\n");
|
|
|
|
+ Global::WriteTextLog("A:超包");
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf + phead->len, pIoContext->m_Overlapped.InternalHigh - phead->len);
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf + phead->len, pIoContext->m_Overlapped.InternalHigh - phead->len);
|
|
_TaskProcess(pIoContext, (SATProtocol::Package*)pIoContext->m_wsaBuf.buf);
|
|
_TaskProcess(pIoContext, (SATProtocol::Package*)pIoContext->m_wsaBuf.buf);
|
|
}
|
|
}
|
|
@@ -764,6 +777,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
|
|
if ( !CheckDataHeader(phead) )
|
|
if ( !CheckDataHeader(phead) )
|
|
{
|
|
{
|
|
OutputDebugString("C:包头损坏;\n");
|
|
OutputDebugString("C:包头损坏;\n");
|
|
|
|
+ Global::WriteTextLog("C:包头损坏");
|
|
pSocketContext->lastData.clear();
|
|
pSocketContext->lastData.clear();
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
@@ -773,6 +787,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
|
|
if ( phead->len <= pSocketContext->lastData.size() )
|
|
if ( phead->len <= pSocketContext->lastData.size() )
|
|
{
|
|
{
|
|
OutputDebugString("C:超包;\n");
|
|
OutputDebugString("C:超包;\n");
|
|
|
|
+ Global::WriteTextLog("C:超包");
|
|
// 完整包;
|
|
// 完整包;
|
|
_TaskProcess(pIoContext, (SATProtocol::Package*)pSocketContext->lastData.substr(0, phead->len).data());
|
|
_TaskProcess(pIoContext, (SATProtocol::Package*)pSocketContext->lastData.substr(0, phead->len).data());
|
|
|
|
|
|
@@ -782,6 +797,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
|
|
else
|
|
else
|
|
{
|
|
{
|
|
OutputDebugString("D:超包;\n");
|
|
OutputDebugString("D:超包;\n");
|
|
|
|
+ Global::WriteTextLog("D:超包");
|
|
lastlen = pSocketContext->lastData.size() + pIoContext->m_Overlapped.InternalHigh - phead->len;
|
|
lastlen = pSocketContext->lastData.size() + pIoContext->m_Overlapped.InternalHigh - phead->len;
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, pIoContext->m_Overlapped.InternalHigh - lastlen);
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, pIoContext->m_Overlapped.InternalHigh - lastlen);
|
|
// 完整包;
|
|
// 完整包;
|
|
@@ -795,6 +811,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
|
|
else
|
|
else
|
|
{
|
|
{
|
|
OutputDebugString("C:仍不足一个包;\n");
|
|
OutputDebugString("C:仍不足一个包;\n");
|
|
|
|
+ Global::WriteTextLog("C:仍不足一个包");
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, pIoContext->m_Overlapped.InternalHigh);
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, pIoContext->m_Overlapped.InternalHigh);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -806,6 +823,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
|
|
if ( diflen > pIoContext->m_Overlapped.InternalHigh )
|
|
if ( diflen > pIoContext->m_Overlapped.InternalHigh )
|
|
{
|
|
{
|
|
OutputDebugString("B:仍不足一个包头;\n");
|
|
OutputDebugString("B:仍不足一个包头;\n");
|
|
|
|
+ Global::WriteTextLog("B:仍不足一个包头");
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, pIoContext->m_Overlapped.InternalHigh);
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf, pIoContext->m_Overlapped.InternalHigh);
|
|
}
|
|
}
|
|
else
|
|
else
|
|
@@ -816,6 +834,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
|
|
if ( !CheckDataHeader(phead) )
|
|
if ( !CheckDataHeader(phead) )
|
|
{
|
|
{
|
|
OutputDebugString("B:包头损坏;\n");
|
|
OutputDebugString("B:包头损坏;\n");
|
|
|
|
+ Global::WriteTextLog("B:包头损坏");
|
|
pSocketContext->lastData.clear();
|
|
pSocketContext->lastData.clear();
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
@@ -824,6 +843,7 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
|
|
if ( phead->len == PAK_LEN + pIoContext->m_Overlapped.InternalHigh - diflen )
|
|
if ( phead->len == PAK_LEN + pIoContext->m_Overlapped.InternalHigh - diflen )
|
|
{
|
|
{
|
|
OutputDebugString("B:完整包;\n");
|
|
OutputDebugString("B:完整包;\n");
|
|
|
|
+ Global::WriteTextLog("B:完整包");
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf + diflen, pIoContext->m_Overlapped.InternalHigh - diflen);
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf + diflen, pIoContext->m_Overlapped.InternalHigh - diflen);
|
|
_TaskProcess(pIoContext, (SATProtocol::Package*)pSocketContext->lastData.data());
|
|
_TaskProcess(pIoContext, (SATProtocol::Package*)pSocketContext->lastData.data());
|
|
pSocketContext->lastData.clear();
|
|
pSocketContext->lastData.clear();
|
|
@@ -832,12 +852,14 @@ void CSATTCPServer::_RecvProcess(PER_SOCKET_CONTEXT* pSocketContext, PER_IO_CONT
|
|
else if ( phead->len > PAK_LEN + pIoContext->m_Overlapped.InternalHigh - diflen)
|
|
else if ( phead->len > PAK_LEN + pIoContext->m_Overlapped.InternalHigh - diflen)
|
|
{
|
|
{
|
|
OutputDebugString("B:小包;\n");
|
|
OutputDebugString("B:小包;\n");
|
|
|
|
+ Global::WriteTextLog("B:小包");
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf + diflen, pIoContext->m_Overlapped.InternalHigh - diflen);
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf + diflen, pIoContext->m_Overlapped.InternalHigh - diflen);
|
|
}
|
|
}
|
|
// 超包;
|
|
// 超包;
|
|
else if (phead->len < PAK_LEN + pIoContext->m_Overlapped.InternalHigh - diflen)
|
|
else if (phead->len < PAK_LEN + pIoContext->m_Overlapped.InternalHigh - diflen)
|
|
{
|
|
{
|
|
OutputDebugString("B:超包;\n");
|
|
OutputDebugString("B:超包;\n");
|
|
|
|
+ Global::WriteTextLog("B:超包");
|
|
// 组完成包;
|
|
// 组完成包;
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf + diflen, phead->len - PAK_LEN);
|
|
pSocketContext->lastData.append(pIoContext->m_wsaBuf.buf + diflen, phead->len - PAK_LEN);
|
|
_TaskProcess(pIoContext, (SATProtocol::Package*)pSocketContext->lastData.data());
|
|
_TaskProcess(pIoContext, (SATProtocol::Package*)pSocketContext->lastData.data());
|
|
@@ -858,6 +880,7 @@ void CSATTCPServer::_TaskProcess(PER_IO_CONTEXT* pIoContext, SATProtocol::Packag
|
|
#ifdef _DEBUG
|
|
#ifdef _DEBUG
|
|
OutputDebugString("\n########成功获取数据########\n\n");
|
|
OutputDebugString("\n########成功获取数据########\n\n");
|
|
#endif
|
|
#endif
|
|
|
|
+ Global::WriteTextLog("成功获取数据");
|
|
|
|
|
|
SATProtocol::DataHeader *pHeader = &pak->header;
|
|
SATProtocol::DataHeader *pHeader = &pak->header;
|
|
if ( !pHeader )
|
|
if ( !pHeader )
|
|
@@ -871,6 +894,7 @@ void CSATTCPServer::_TaskProcess(PER_IO_CONTEXT* pIoContext, SATProtocol::Packag
|
|
{
|
|
{
|
|
// 登录;
|
|
// 登录;
|
|
SATProtocol::UserInfo *pLogin = (SATProtocol::UserInfo*)pak->buf;
|
|
SATProtocol::UserInfo *pLogin = (SATProtocol::UserInfo*)pak->buf;
|
|
|
|
+ Global::WriteTextLog(_T("User=%s, psw=%s"), pLogin->szUserName, pLogin->szPassword);
|
|
bool bRet = CSATExecutor::GetInstance()->Login(pLogin->szUserName, pLogin->szPassword, !pHeader->cmd);
|
|
bool bRet = CSATExecutor::GetInstance()->Login(pLogin->szUserName, pLogin->szPassword, !pHeader->cmd);
|
|
|
|
|
|
// 计算数据包长度;
|
|
// 计算数据包长度;
|