在n个主机(N1,N2......Nn)上使用继承至CSocket的Socket侦听,在主机M上建立n个继承至ASyncSocket的ClientSocket和这n个主机建立连接,建链成功后,Socket之间用20的定时互发心跳消息。
问题:
以1000秒为单位统计M和N1,N2...Nn上的心跳包发现这样的问题:在M上每个1000秒都能正常的受到50个由N1,到Nn发来的心跳包,但在在N1到Nn上统计的包却不正常,有的1000秒收到40个来之M的心跳包,有的1000秒却收到60个来至M的心跳包,不稳定。出现这个问题导致我做链路检测不好实现,不知道多长时间收不到包就表示链路出问题,在我原来的程序中我以6次收不到心跳包表示链路断,经常有6×20秒一个包都收不到的时候。
M和这n个主机没有丢包,长时间ping2000个Byte的包也很正常。我在M上创建的Soclet设置成立即发送模式,故障现象依旧。
请dx看一下是什么问题导致N1到Nn收包有这样的问题???
谢谢了先!!!
问题:
以1000秒为单位统计M和N1,N2...Nn上的心跳包发现这样的问题:在M上每个1000秒都能正常的受到50个由N1,到Nn发来的心跳包,但在在N1到Nn上统计的包却不正常,有的1000秒收到40个来之M的心跳包,有的1000秒却收到60个来至M的心跳包,不稳定。出现这个问题导致我做链路检测不好实现,不知道多长时间收不到包就表示链路出问题,在我原来的程序中我以6次收不到心跳包表示链路断,经常有6×20秒一个包都收不到的时候。
M和这n个主机没有丢包,长时间ping2000个Byte的包也很正常。我在M上创建的Soclet设置成立即发送模式,故障现象依旧。
请dx看一下是什么问题导致N1到Nn收包有这样的问题???
谢谢了先!!!
这个可能性不大,因为我是这样实现的:ServerSocket的Accept被调用的时候创建继承自ASyncSocket的ClinetSocket与M的Socket通讯,而检测链路的方法是ClinetSocket的成员方法,
代码:
void ServerSocket::TestClientLink()
{
BOOL result=0;
ClientSocket * pClientSocket = NULL;
POSITION pos,temp;
for(pos = m_ClientList.GetHeadPosition(); pos != NULL;)
{
temp = pos;
pClientSocket = (ClientSocket *)m_ClientList.GetNext(pos);
if (pClientSocket->m_close)
{
m_ClientList.RemoveAt(temp);
delete pClientSocket;
}
else
{
pClientSocket->TestLink();
}
}
}to 白云:
有可能,我加一下M的调用Send的打印统计,顺便抓一下M的包看一下。to all:
Thanks a lot, Happy new year!!
我有命令码的,收到的消息里的命令码是心跳命令才统计!!