我近一个月都在搞Socket 编程.我觉得你如果用来编写聊天室程序,完全没有必要用Client/Server模式.使用广播通信完全可以达到可靠性要求(我自己也编写了一个聊天室).使用广播通信可以所有的通信端口号保持一致.对于服务器程序发送数据地址用INADDR_BROADCAST,对于客户程序发送地址统一用服务器地址.如果用Client/Server模式则必须使用多线程才可以较好地解决问题.(My E_mail:[email protected])
调试欢乐多
然后,你把服务端发送数据的那一段程序写在这个贴子里。我现在不知道你是怎么样发
数据的。
[email protected]
服务器端接收及发送程序是这样的:
void CNewSocket::OnReceive(int nErrorCode)
{
// TODO: Add your specialized code here and/or call thebaseclass
m_nLength=Receive(m_szBuffer,sizeof(m_szBuffer),0);
// 直接转发消息
AsyncSelect(FD_WRITE);
}
void CNewSocket::OnSend(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the basclass
Send(m_szBuffer,m_nLength,0);
memset(m_szBuffer,0,m_nLength);
AsyncSelect(FD_READ);
}
所以如要给所有的连接都发信息,你必须调用每一个在accept中创建的CAsyncSocket对象
的send函数。(或许有广播的方法,不过我不知道)。
{
// TODO: Add your specialized code here and/or call thebaseclass
m_nLength=Receive(m_szBuffer,sizeof(m_szBuffer),0);
// 直接转发消息
for(m=1;m<k;m++)
{
m_pSocket[m]->AsyncSelect(FD_WRITE);
}
}