CAsyncSocket 多客户端 用CAsyncSocket做了客户端与服务器端,仅为一个客户端,可以互发信息,但是不知道多个客户端给服务器发信息是怎么实现的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用CObArray存储联到服务器的各个客户端信息,然后一个个发就行了 小弟用CPtrList尝试 一直,没有成功.能不能给段代码 看看啊 不胜感激!!!! 对于TCP,每个客户端都需要与服务器建立连接,在服务器端每个连接各用一个socket。对于UDP,接收数据的同时会得到对方的地址。 void CNewSocket::OnAccept(int nErrorCode){ CFormView2* pView = (CFormView2*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveView(); if(nErrorCode==0) pView->OnAccept(); }void CFormView2::OnAccept(){ CNewSocket *svclieSocket=new CNewSocket(); svclieSocket->Accept(m_sConnectSocket); }void CFormView2::OnReceive(){iRcvd=m_sConnectSocket.Receive(pBuf,iBufSize);}怎样修改啊????????? 你可以下载下面类库试试:类库KYLib 2.0 for VC6: http://download.csdn.net/source/1031569 类库KYLib 2.0 for VS2005: http://download.csdn.net/source/1032667 针对 socket 有完善的类,可以方便接收和发送,如:TKYTCPClient, TKYTCPServer, TKYSockRecvThread等等。 用CAsyncSocket处理多连接总感觉不稳当啊,建议LZ用winsock吧,一劳永逸~没直接用过,LZ看看吧,自己调试一下struct SOCKINFO { CNewSocket *pSocket; char* pBuf; int iBufSize;}CPtrList m_socketList;//重写OnAcceptvoid CNewSocket::OnAccept(int nErrorCode) { CNewSocket* pSocket = new CNewSocket; Accept(*pSocket); SOCKINFO *pSockInfo = new SOCKINFO; pSockInfo->pSocket = pSocket; pSockInfo->iBufSize = 1024; pSockInfo->pBuf = new char[1024]; m_socketList.AddTail(pSockInfo);} //重写OnReceivevoid CNewSocket::OnReceive( int nErrorCode ){ SOCKINFO *pSockInfo; POSITION pos; for (int i = 0; i < m_socketList.GetCount(); i++) { pos = m_socketList.FindIndex(i); pSockInfo = (SOCKINFO*)m_socketList.GetAt(pos); if (m_hSocket == pSockInfo->pSocket->m_hSocket) //你要是这句吗?m_hSocket是CAsyncSocket的1个静态变量,其实就是socket { iRcvd = Receive(pSockInfo->pBuf,pSockInfo->iBufSize); if (iRcvd == SOCKET_ERROR) OnClose(...); } }}//重写OnClosevoid CNewSocket::OnClose( int nErrorCode ){ SOCKINFO *pSockInfo; POSITION pos; for (int i = 0; i < m_socketList.GetCount(); i++) { pos = m_socketList.FindIndex(i); pSockInfo = (SOCKINFO*)m_socketList.GetAt(pos); if (m_hSocket == pSockInfo->pSocket->m_hSocket) //你要是这句吗?m_hSocket是CAsyncSocket的1个静态变量,其实就是socket { delete pSockInfo; m_socketList.RemoveAt(pos); break; } }} void CNewSocket::OnReceive(){iRcvd=Receive(pBuf,iBufSize);} 从 CAsyncSocket 派生类,然后 accept的是 new 出来 CNewSocket::OnAccept中,构造一个CAsyncSocket派生类对象,然后调用this->Accept,将新构造的对象作为函数参数,把你现有的代码都删掉。 六楼仁兄说的好像CAsyncSocket不是winsock?别吧楼主忽悠了呀,多个客户端就accept后new多个对象,不同连接互不干扰啊 如何更新界面才好 MFC中如何创建线程 发现一种简单高效的Hash算法,比常用的几种算法效率高出一倍以上 大家帮忙分析一下这个h.264流的文件头,为什么解码为只显示一部分。 DAO对象为什么打不开ACCESS2000及以上版本的数据库???? 请问初学数据库应该看什么书?入门以后又应该看什么书呢? WriteFile()怎么用?谁能解决,定送高分。 请问,在VC编译器下, 怎样使得位段定义有意义? 这是个什么问题,该怎么解决??? 一个奇怪的注册表问题。。。 用http下载时,怎么判断服务器是否支持断点续传,即是否可以使用range头域? 问个DirectX问题!【结贴率100%】
小弟用CPtrList尝试 一直,没有成功.
能不能给段代码 看看啊 不胜感激!!!!
对于UDP,接收数据的同时会得到对方的地址。
{
CFormView2* pView = (CFormView2*)((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetActiveView();
if(nErrorCode==0)
pView->OnAccept(); }
void CFormView2::OnAccept()
{
CNewSocket *svclieSocket=new CNewSocket();
svclieSocket->Accept(m_sConnectSocket);
}
void CFormView2::OnReceive()
{
iRcvd=m_sConnectSocket.Receive(pBuf,iBufSize);
}
怎样修改啊?????????
类库KYLib 2.0 for VC6: http://download.csdn.net/source/1031569
类库KYLib 2.0 for VS2005: http://download.csdn.net/source/1032667 针对 socket 有完善的类,可以方便接收和发送,如:TKYTCPClient, TKYTCPServer, TKYSockRecvThread等等。
没直接用过,LZ看看吧,自己调试一下
struct SOCKINFO {
CNewSocket *pSocket;
char* pBuf;
int iBufSize;
}CPtrList m_socketList;//重写OnAccept
void CNewSocket::OnAccept(int nErrorCode)
{
CNewSocket* pSocket = new CNewSocket;
Accept(*pSocket);
SOCKINFO *pSockInfo = new SOCKINFO;
pSockInfo->pSocket = pSocket;
pSockInfo->iBufSize = 1024;
pSockInfo->pBuf = new char[1024];
m_socketList.AddTail(pSockInfo);
} //重写OnReceive
void CNewSocket::OnReceive( int nErrorCode )
{
SOCKINFO *pSockInfo;
POSITION pos;
for (int i = 0; i < m_socketList.GetCount(); i++)
{
pos = m_socketList.FindIndex(i);
pSockInfo = (SOCKINFO*)m_socketList.GetAt(pos);
if (m_hSocket == pSockInfo->pSocket->m_hSocket)
//你要是这句吗?m_hSocket是CAsyncSocket的1个静态变量,其实就是socket
{
iRcvd = Receive(pSockInfo->pBuf,pSockInfo->iBufSize);
if (iRcvd == SOCKET_ERROR)
OnClose(...);
}
}
}//重写OnClose
void CNewSocket::OnClose( int nErrorCode )
{
SOCKINFO *pSockInfo;
POSITION pos;
for (int i = 0; i < m_socketList.GetCount(); i++)
{
pos = m_socketList.FindIndex(i);
pSockInfo = (SOCKINFO*)m_socketList.GetAt(pos);
if (m_hSocket == pSockInfo->pSocket->m_hSocket)
//你要是这句吗?m_hSocket是CAsyncSocket的1个静态变量,其实就是socket
{
delete pSockInfo;
m_socketList.RemoveAt(pos);
break;
}
}
}
{
iRcvd=Receive(pBuf,iBufSize);
}
别吧楼主忽悠了呀,多个客户端就accept后new多个对象,不同连接互不干扰啊