求解决方法:Server端接到大量的数据后,然后要把这些数据发送大所有的Client( 250 个Client ),请问怎么解决?
求解决方法:Server端接到大量的数据后,然后要把这些数据发送大所有的Client( 250 个Client ),请问怎么解决?
每秒大概有40个数据包过来,然后把这40个数据包发到所有的client,client有250个,
问题出在了:当我循环Send发送时,不是每次都出错,但是会经常出10035的错误!
这个时候是不是需先把这些数据包写入队列,然后再开一个线程去一个个的发送,这样就不会出10035的错误了?如果是这样,那请问怎么样把数据写入队列,再怎么样去开一个线程把队列中的数据读出来,然后一个个的发送出去??
我的代码如下:
//发送数据到客户端
int SendDataToAllClient(CString strText)
{
//发送数据到所有的client
int nSendCount = -1;
POSITION pos = m_gpClientSocketList->GetHeadPosition();
if( pos == NULL )
return nSendCount;
if( pos )
{
for(int i=0;i<m_gpClientSocketList->GetCount();i++)
{
CHLSocket *pHLSocket = static_cast <CHLSocket *>(m_gpClientSocketList->GetNext( pos ) );
if( pHLSocket == NULL )
return -1;
if( pHLSocket->m_hSocket != NULL )
{
//判断是否处于阻塞模式
if( !pHLSocket->IsBlocking() )
{
Sleep( 100 );
//处于非阻塞模式,立即发送数据到client
nSendCount = pHLSocket->Send( strText, strlen( strText ), 0 );
}
else
{
//处于阻塞,等待100
DWORD dwResult = ::WaitForSingleObject( &pHLSocket->m_hSocket, 100 );
//再次发送数据到client
nSendCount = pHLSocket->Send( strText, strlen( strText ), 0 );
}
}
}
}
return nSendCount;
}