怎样用MFC的类CAsyncSocket作服务器程序同时对多个客户端程序发信息

dreamseekers 2000-03-19 07:51:00
我原想编一个聊天程序,打开两个客户端程序后(两个均能与服务器程序连接上),客户端程序向服务器程序发一个信息(指字符串)后,服务器程序收到之后,再发回给客户端程序,可是只有发出去的那一个客户端程序能接收到信息,另外一个却接收不道,不知是
什么原因,请各位高手多多指点。
服务器程序的重载了的OnAccept函数如下:
void CMyServerSocket::OnAccept(int nErrorCode)
{
CNewSocket* pSocket = new CNewSocket();
if(Accept(*pSocket))
{
k++;
pSocket->AsyncSelect(FD_READ);
m_pSocket[k]=pSocket;
int m;
for(m=1;m<k;m++)
{
m_pSocket[m]->AsyncSelect(FD_READ);
}
}
else
delete pSocket;
}
其中m_pSocket是一个CNewSocket类的指针数组,用NewSocket.cpp来实现
OnReceive和OnSend
...全文
493 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
oo 2000-03-20
  • 打赏
  • 举报
回复
你每次调用accept都要创建一个新的CAsyncSocket对象来处理相应的连接。
所以如要给所有的连接都发信息,你必须调用每一个在accept中创建的CAsyncSocket对象
的send函数。(或许有广播的方法,不过我不知道)。
Jackzhu 2000-03-20
  • 打赏
  • 举报
回复
是不是首先接收的socket把接收缓冲清空了,其他的当然无法接收了
dreamseekers 2000-03-20
  • 打赏
  • 举报
回复
嘿,谢谢各位大侠指点,不过每个客户端程序连接时服务器端程序都执行了OnAccept函数,不过只有发送信息(字符串)的客户端程序才能收到,如果我想用server_client模式解决这个问题,不知应该怎么办?
服务器端接收及发送程序是这样的:
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);
}
yxj 2000-03-20
  • 打赏
  • 举报
回复
void CNewSocket::OnReceive(int nErrorCode)
{
// 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);
}
}
Sniper 2000-03-19
  • 打赏
  • 举报
回复
我同意cxwhust的意见,就你的应用需求而言,选用广播方式的套接字通讯比较合适。
JJONY 2000-03-19
  • 打赏
  • 举报
回复
首先,你可以调试一下,看看客户端与服务端连接时是否执行了OnAccept两次,
然后,你把服务端发送数据的那一段程序写在这个贴子里。我现在不知道你是怎么样发
数据的。
jjony@sina.com
cxwhust 2000-03-19
  • 打赏
  • 举报
回复
我近一个月都在搞Socket 编程.我觉得你如果用来编写聊天室程序,完全没有必要用Client/Server模式.使用广播通信完全可以达到可靠性要求(我自己也编写了一个聊天室).使用广播通信可以所有的通信端口号保持一致.对于服务器程序发送数据地址用INADDR_BROADCAST,对于客户程序发送地址统一用服务器地址.如果用Client/Server模式则必须使用多线程才可以较好地解决问题.(My E_mail:cxwhust@263.net)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧