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