如何让使用CAsyncSocket类接受多用户连接(就是一服务器+多客户端方式)?

AbsurdLife 2003-08-18 08:02:06
我是这样做的:让监听Socket一直处于监听状态,它里面有一个CAsyncSocket数组来与用户连接,每次连接数组序号加一,等待下一个连接。可是只有一个客户端能够连接上,其他的不行,不知怎么会事。

请问那里出问题了,该如何处理,请高手指点迷津。
...全文
151 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
AbsurdLife 2003-08-19
  • 打赏
  • 举报
回复
另外,当一个套接字接收一个远端连接后,是否就不再监听了,我用timer强制它监听是否有错?还有bind是否应该用上?

分不是问题,能解决问题绝对可以给高分,希望大家帮忙。
AbsurdLife 2003-08-19
  • 打赏
  • 举报
回复
to 大家:
我大致就是你们说的这样处理的,我把代码贴一下,帮忙看看有什么地方不对好吗?
//--------------------------
void ServerSck::OnAccept(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
CClientSck *pSckNew=new CClientSck();

if(Accept(*pSckNew))
{
pSckNew->AsyncSelect(FD_READ);
m_pSck[m_nSckCount]=pSckNew;


CWinApp* thisApp=AfxGetApp();
CServerDlg* thisDlg=(CServerDlg*)(thisApp->GetMainWnd());

//char RemoteIp[20];
//memset(RemoteIp,0,20);
CString RemoteIp;
unsigned int nport=5150;
m_pSck[m_nSckCount]->GetPeerName(RemoteIp,nport);
char szRemoteIp[20];
memset(szRemoteIp,0,20);
strcpy(szRemoteIp,RemoteIp);

char strtemp[100];
sprintf(strtemp,"%s%s","已经连接到远程客户端",szRemoteIp);

//thisDlg->KillTimer(1);
CWnd* label=thisDlg->GetDlgItem(IDC_Status);
label->SetWindowText(strtemp);

CWnd* btnListen=thisDlg->GetDlgItem(IDC_Listen);
btnListen->EnableWindow(false);

CWnd* btnSend=thisDlg->GetDlgItem(IDC_Send);
btnSend->EnableWindow(true);

//thisDlg->m_ServerSck.Listen(1);
m_nSckCount++;
}
else
{
delete pSckNew;
}

CAsyncSocket::OnAccept(nErrorCode);
}
//--------------------------
AbsurdLife 2003-08-19
  • 打赏
  • 举报
回复
up
joinrry 2003-08-18
  • 打赏
  • 举报
回复
在Server端的OnAccept()相应事件中

单步调试一下,
是否没有产生网络事件
或者是处理接受Accept的线程中止啦!

遇到任何问题,重要的是断点调试
flinming 2003-08-18
  • 打赏
  • 举报
回复
客户端来连接,服务器监听产生一个新的套接字,这个套接字就是客户端连接,负责发送数据接收数据,关闭套接字等等。
与多个客户端连接,服务器以要控制好当前套接字是与那个客户端连接的问题!控制就是麻烦一点!
lggang 2003-08-18
  • 打赏
  • 举报
回复
在Server端和Client端都要进行设置,程序如下:
在Server端的OnAccept()相应事件中
CServerSocket* pSocket=new CServerSocket;
m_pSocket->Accept(*pSocket);
即每有一个连接请求触发OnAccept()事件时,就动态生成一个用于与客户端连接的Socket
Server端就用这个Socket与客户端通信。
当有另一个请求来的时候,同样触发OnAccept()事件,会再次动态生成与客户端连接的Socket。
在Client端连接请求事件中:
CClientsocket* pSocket=new CServersocket;
pSocket->Create();
这样就能实现多连接了
psocket->Connect();


18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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