呵呵,是不是听起来很傻?我使用从CSocket派生出来的类进行编程,客户端只设一个CSocket对象,设置定时器向各个服务器轮流发送请求是没有问题的,因为有延时吧,可以比较从容的处理数据可是当我使用for循环迅速的查询数据的时候,问题就出现了,系统只返回最后一个服务器的数据,代码大致如下:for(...)
{ m_sConnectSocket.Close();
m_sConnectSocket.Create();
if(!m_sConnectSocket.Connect(SvrAdd,ServerPort))
{
//记录错误日志
//AfxMessageBox(str);
}
int nSend = m_sConnectSocket.Send(reqStr,reqStr.GetLength());
if(nSend==SOCKET_ERROR)
{
//记录错误日志
//AfxMessageBox("error");
}
}
然后在OnReceive()函数中处理,但已经接受不到前面的服务器的信息了问题也很明显,就是m_sConnectSocket.Close()导致连接尚未收到数据就被断开,有什么好的方法可以解决这个问题呢?最好不要使用多个客户端连接,只要控制好这一个连接能够顺序接受数据,接受不到放弃然后接受下一个就行。初学socket, 还望各位援手! 100分相送,先完整回答者至少50,再谢!
{ m_sConnectSocket.Close();
m_sConnectSocket.Create();
if(!m_sConnectSocket.Connect(SvrAdd,ServerPort))
{
//记录错误日志
//AfxMessageBox(str);
}
int nSend = m_sConnectSocket.Send(reqStr,reqStr.GetLength());
if(nSend==SOCKET_ERROR)
{
//记录错误日志
//AfxMessageBox("error");
}
}
然后在OnReceive()函数中处理,但已经接受不到前面的服务器的信息了问题也很明显,就是m_sConnectSocket.Close()导致连接尚未收到数据就被断开,有什么好的方法可以解决这个问题呢?最好不要使用多个客户端连接,只要控制好这一个连接能够顺序接受数据,接受不到放弃然后接受下一个就行。初学socket, 还望各位援手! 100分相送,先完整回答者至少50,再谢!
解决方案 »
- 如何改变MFC工具条大小?
- VS2008与OpenCV2.1的安装配置问题
- 如何将ansi的格式字符转换为utf8格式?
- Graphics * pGC = Graphics::FromImage( pBmp ) 此后如何释放内容
- 如何使标题栏上的"X"按钮,变灰?能看到,但是不能按(disable)?
- 如何读取系统的操作系统事件日志?有这样的函数吗?
- 两个按钮单击响应函数为同一个,怎么判断消息来自哪一个?
- 能不能声明 枚举类型为下标 的 数组??
- 关于WSArecv的问题
- ODBC,DAO,ADO 三种数据库技术,到底孰优孰劣,如果我做局域网里的像Oicq的软件,服务器端用什么数据库为好?
- 我的机器上为什么没有“iphlpapi.h”文件
- ★★★ 200分送:有关AC3的原理或者相关文档 (紧急!)★★★
{
WaitForSingleObject(...);
m_sConnectSocket.Close();
...
}