求解决方法: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;
}
问题出在了:当我循环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;
}
解决方案 »
- ScrollView中的图像怎么去定位~
- 难题 怎样给shellexecute传递参数
- 一个重叠事件,一次投递,被2个工作者线程得到
- 请教一个视图的SQL语句写法.
- 用C写的OO模块,碰到编译器抱怨符号多重typedef,怎么解决呢?
- 求助:VC6编译器右边类的栏里找不到类怎么办???急!!
- 如何获取别的项目中对话框资源?并对里面的控件进行修改?
- vss的简单问题。
- 倒分!http://www.csdn.net/expert/topic/1092/1092004.xml?temp=.5949365
- 用盗版的请进。为什么cv中多次编译不同的文件出现问题?
- 如何才能把EVENTMSG数据保存出来?
- 动态连接库跟踪全局变量问题
TLS to store data;