void CServiceDlg::NotifyReceivedPackage(CClientInfo *pClient, CIOCPBuffer *pOverlapBuf, int nSize)
{
SendPackage(pClient, "aaaaa", strlen("aaaaa"));
SendPackage(pClient, "bbbbb", strlen("bbbbb"));
SendPackage(pClient, "ccccc", strlen("ccccc"));
SendPackage(pClient, "ddddd", strlen("ddddd"));
}IOCP server源码是网上下的,急救,客户端只能接受一条啊!前辈有没碰到过啊!~救命!~
{
SendPackage(pClient, "aaaaa", strlen("aaaaa"));
SendPackage(pClient, "bbbbb", strlen("bbbbb"));
SendPackage(pClient, "ccccc", strlen("ccccc"));
SendPackage(pClient, "ddddd", strlen("ddddd"));
}IOCP server源码是网上下的,急救,客户端只能接受一条啊!前辈有没碰到过啊!~救命!~
BOOL CIOCPServer::SendPackage(CClientInfo *pClient, char* pSendBuf, int nSendLen)
{
CIOCPBuffer *pOverlapBuf = AllocateBuffer(IO_Write); if (pOverlapBuf != NULL) {
if (pOverlapBuf->CreatePackage(pSendBuf, nSendLen)) {
BOOL ret = AsynSend(pClient, pOverlapBuf);
return ret;
}
else {
ReleaseBuffer(pOverlapBuf);
return FALSE;
}
}
return FALSE;
}BOOL CIOCPServer::AsynSend(CClientInfo *pClient, CIOCPBuffer *pOverlapBuf)
{
if (pOverlapBuf == NULL){
ReleaseBuffer(pOverlapBuf);
pOverlapBuf = NULL;
return FALSE;
} if ( pClient->m_Socket != INVALID_SOCKET ) {
BOOL bSuccess = PostQueuedCompletionStatus(m_hCompletionPort, pOverlapBuf->GetUsed(),
(DWORD)pClient, &pOverlapBuf->m_OverLapped);
if ((!bSuccess && GetLastError() != ERROR_IO_PENDING)) {
ReleaseBuffer(pOverlapBuf);
ToIdleClientList(pClient);
return FALSE;
}
return TRUE;
}
else {
ReleaseBuffer(pOverlapBuf);
ToIdleClientList(pClient);
} return FALSE;
}
CIOCPBuffer* CIOCPServer::AllocateBuffer(EnIOType nType)
{
CIOCPBuffer *pBuf = NULL; m_IdleBufferLock.Lock();
if (!m_IdleBufferList.IsEmpty()) {
pBuf = (CIOCPBuffer *)m_IdleBufferList.RemoveHead();
}
m_IdleBufferLock.Unlock(); if (pBuf == NULL) {
pBuf = new CIOCPBuffer();
if (!pBuf) {
return NULL;
}
} if (pBuf != NULL) {
pBuf->EmptyUsed();
pBuf->SetOperation(nType); POSITION pos = NULL; m_UsedBufferLock.Lock();
pos = m_UsedBufferList.AddHead(pBuf);
if (pos != NULL) {
pBuf->SetPosition(pos);
}
else {
delete pBuf;
m_UsedBufferLock.Unlock();
return NULL;
}
m_UsedBufferLock.Unlock();
} return pBuf;
}
BOOL CIOCPServer::SendPackage(CClientInfo *pClient, char* pSendBuf, int nSendLen)
{
...//
这里加个 Sleep(1000);会好点
}