case arg.LIAO:
POSITION pos1;
SOCKADDR_IN tSock1;
arg>>datanode.userid;
arg>>datanode.liao;
for( pos1 = m_OnlineLink.GetHeadPosition(); pos1 != NULL;)
{
if( OnMainDB(datanode) )
{
argsend<<arg.LIAOBACK;
argsend<<datanode.nickname;
argsend<<datanode.liao;
sendto(pIOData->m_sock,argsend.m_buf,sizeof(argsend.m_buf),flag,
(SOCKADDR *)&(m_OnlineLink.GetAt(pos1).saddr),sizeof(SOCKADDR));
break;
}
}
以上是服务端返回客户端的主要代码,我做的是多客户端的,问题出在,我开起2个客户端后,第一个进的发信息,第一和第2都能看见,第2发的只有自己能见;开起第3个客户端后,第2和第3能见,第1看不见,此时第2发的还是只能自己见,第1发的第1,2能见,第3看不见这是怎么回事
POSITION pos1;
SOCKADDR_IN tSock1;
arg>>datanode.userid;
arg>>datanode.liao;
for( pos1 = m_OnlineLink.GetHeadPosition(); pos1 != NULL;)
{
if( OnMainDB(datanode) )
{
argsend<<arg.LIAOBACK;
argsend<<datanode.nickname;
argsend<<datanode.liao;
sendto(pIOData->m_sock,argsend.m_buf,sizeof(argsend.m_buf),flag,
(SOCKADDR *)&(m_OnlineLink.GetAt(pos1).saddr),sizeof(SOCKADDR));
break;
}
}
以上是服务端返回客户端的主要代码,我做的是多客户端的,问题出在,我开起2个客户端后,第一个进的发信息,第一和第2都能看见,第2发的只有自己能见;开起第3个客户端后,第2和第3能见,第1看不见,此时第2发的还是只能自己见,第1发的第1,2能见,第3看不见这是怎么回事
{
CString tstr;
argrecv>>g_node.nickname;
argrecv>>tstr;
tstr=g_node.nickname+":"+tstr;
GetDlgItem(IDC_STATIC_liao1)->SetWindowText(tstr);
}
这是我客户端接收聊天信息的主代码
估计问题在这
for( pos1 = m_OnlineLink.GetHeadPosition(); pos1 != NULL;)
{
if( OnMainDB(datanode) )
{
下个断点调试看里面的循环有没有出错
还有,OnMainDB这个是拿来干啥的?
是不是因为这个而没有进入到发送代码那里
慢慢调试~~
一个GetSize和GetAt就可以把客户端列表遍历出来~~