社区
网络编程
帖子详情
CAsyncSocket 一服务器对多客户端
pizicai105
2005-08-19 02:31:19
想实现一服务器对多客户端的连接
请问怎么写?能具体点吗!最好是有源程序参考,谢谢
...全文
648
21
打赏
收藏
CAsyncSocket 一服务器对多客户端
想实现一服务器对多客户端的连接 请问怎么写?能具体点吗!最好是有源程序参考,谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gohappy_1999
2005-09-19
打赏
举报
回复
mark
sungengyu
2005-09-05
打赏
举报
回复
惭愧
pizicai105
2005-08-26
打赏
举报
回复
怎样在OnReceive接收到消息时获得发送方的Sock
pizicai105
2005-08-25
打赏
举报
回复
怎样在OnReceive接收到消息时获得发送方的Sock
pizicai105
2005-08-25
打赏
举报
回复
你说的在 “OnReceive中触发一个处理函数,里面会用多个OnSend”,我不知道行不行。
这里的一个处理函数是这样的,它先处理客户端发送过来的字符串,字符串有很多种可能,每种可能都将产生不一样的onsend给客户端,
sungengyu(快乐机器)
CRequestSocket::OnReceive() 中得到客户端的地址:
CString addr ;
UINT port ;
GetPeerName(addr,port) ;
OnAccept()中
SOCKADDR_IN ClientAddr;
int addr_length = sizeof(ClientAddr);
CSocket::Accept (*pSocket,(SOCKADDR*)&ClientAddr,&addr_length);
lpIp = inet_ntoa(ClientAddr.sin_addr);//********Client IP
nPort = ClientAddr.sin_port; //*****************Client Port
两者得到的端口号怎么会不一样??奇怪!!!!!!
sungengyu
2005-08-24
打赏
举报
回复
CRequestSocket 中的 m_buffer , m_iBufferLen 中存放的是返回的数据。这个数据应该在 OnReceive中被设置。这个过程不能用太长时间,否则可能影响到其他客户端的连接。
我也是刚学网络编程,大家共同进步。
sungengyu
2005-08-24
打赏
举报
回复
CRequestSocket 也需要覆盖基类的部分虚函数
CListenSocket::OnAccept 返回后,下一个被调用的是 CRequestSocket::OnReceive
在 CRequestSocket::OnReceive 中设定 AsyncSelect(FD_WRITE|FD_CLOSE) ;
CRequestSocket::OnSend 就会被调用
// 从
void CRequestSocket::OnReceive(int nErrorCode)
{
const int BUFFER_SIZE = 4096 ;
char *buffer = new char [BUFFER_SIZE] ;
int len = 0 ;
while(1)
{
len = Receive(buffer,BUFFER_SIZE) ;
// 这里要判断 len 的值,一次接受不完需要多次接受
// 具体细节请看MSDN
break ;
}
if(len<=0)
ShutDown() ;
else
{
theResponse.GetResponse(buffer,len,m_buffer,m_iBufferLen) ;
AsyncSelect(FD_WRITE|FD_CLOSE) ; // 这是为了触发 OnSend
}
delete []buffer ; buffer=0 ;
}
// OnSend 在 OnReceive 中被触发
// 代码很简单
void CRequestSocket::OnSend(int nErrorCode)
{
Send(m_buffer,m_iBufferLen) ; // m_buffer , m_iBufferLen 是 CRequestSocket
// 的成员函数,并在OnReceive中被设置
ShutDown() ;
Close() ;
// 如果需要的话,可以释放自己 delete this ;
}
sungengyu
2005-08-24
打赏
举报
回复
从 CAsyncSocket 派生一个 CListenSocket(监听),一个CRequestSocket(响应)
CListenSocket :
// 外部调用
theListenSocket.Create(80 , SOCK_STREAM, FD_ACCEPT) ;
theListenSocket.Listen() ;
// 重写 OnAccept
void CListenSocket::OnAccept(int nErrorCode)
{
CRequestSocket *pRequest = new CRequestSocket ;
if( !pRequest)
return ;
if ( Accept( *pRequest ) )
{
pRequest->AsyncSelect( FD_READ|FD_CLOSE);
}
// CAsyncSocket::OnAccept(nErrorCode);
}
Wolfe
2005-08-24
打赏
举报
回复
我还是习惯用原始socket
服务端接收每个客户端连接的时候都会返回一个socket,你可以用这个socket来识别各个客户端,每监听到一个就存储一个。
sungengyu
2005-08-24
打赏
举报
回复
CRequestSocket::OnReceive() 中得到客户端的地址:
CString addr ;
UINT port ;
GetPeerName(addr,port) ;
你说的在 “OnReceive中触发一个处理函数,里面会用多个OnSend”,我不知道行不行。
希望你能把你的试验结果告诉大家,谢谢。
pizicai105
2005-08-24
打赏
举报
回复
我想知道在OnReceive接收到消息的同时能否得到其IP地址和端口,怎么做才能得到?
pizicai105
2005-08-24
打赏
举报
回复
sungengyu(快乐机器)
你的代码的确能实现一对多,但是,你的OnSend只能在OnReceive中触发,
我现在要的程序是OnReceive触发一个处理函数,然后在里面会用多个OnSend
我想知道在OnReceive接收到消息的同时能否得到其IP地址和端口,怎么做才能得到?
如果能得到的话,我在OnAccept时将其IP地址和端口放入CPtrList中,以后的话再将队列中的拿出来跟OnReceive中得到的相比较,就可以得出客户端的位置了!
你们说这样对吗?
zyyoung
2005-08-23
打赏
举报
回复
www.vckbase.com
masterz
2005-08-23
打赏
举报
回复
http://www.fruitfruit.com/vc/network/asyncsocket_test.cpp.txt
这里是1对1的连接,你可以在这个基础上修改。
Zhymax
2005-08-23
打赏
举报
回复
可以每一个客户端建一个线程,用一个链表管理这些连接的客户端
pizicai105
2005-08-23
打赏
举报
回复
具体点说吧,
就是服务器也能识别客户端,并且能向客户端发送消息
发消息的函数是send,可是我现在问题是:客户端很多个,服务器怎么判断要发给哪个客户端,
有人用CPtrList队列做,但是好像不太行,有人用线程做,怎么做?请指教!
xxrl
2005-08-22
打赏
举报
回复
www.vckbase.com 楼上多了一个字母
nuaawenlin
2005-08-19
打赏
举报
回复
www.vckabase.com
pizicai105
2005-08-19
打赏
举报
回复
老实说我下了很多源码,
都写得太乱或太复杂,我看得不太懂
最好有点简单一点的
李马
2005-08-19
打赏
举报
回复
http://www.codeproject.com/internet/winsockintro03.asp
加载更多回复(1)
CA
sync
Socket
异步实现
服务器
与
客户端
VC6.0/2013下
CA
sync
Socket
类异步实现
服务器
与
客户端
网络通信,Server支持多
客户端
并发 访问,支持大数据包传输。简单的现程安全队列ThreadSafeQueue;CServer
Socket
为服务端监听
Socket
类,CConnect
Socket
为连接至...
MFC下使用
CA
sync
Socket
类建立TCP
客户端
与
服务器
.zip
CA
sync
Socket
是MFC对Windows
Socket
API(Winsock)的一个封装,使得在MFC应用中进行网络通信变得更加方便。 首先,TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它通过三次握手建立...
MFC下使用
CA
sync
Socket
类建立UDP
客户端
与
服务器
.zip
在本文中,我们将深入探讨如何在Microsoft Foundation Class (MFC) 框架下使用
CA
sync
Socket
类来构建一个基于UDP的
客户端
与
服务器
应用程序。MFC是微软为C++开发的面向对象的类库,它提供了对Windows API的封装,使得...
CA
Sync
Socket
客户端
服务器
框架完整代码(VS2010)
用
CA
sync
Socket
开发,可以省去线程管理的工作,用起来就一个字:爽! 本想不要资源分的,因为资源分对我来说并不紧张。但为了让您能够稍稍关注一下,就点了3分。 如果您觉得这个资源对您有帮助,请点一下赞。哦,...
MFC TCP多
客户端
通信(基于
CA
sync
Socket
)
一个简单且简陋的小测试程序,支持
服务器
对某
客户端
,
服务器
对所有
客户端
,
客户端
之间的通信。TCP
Socket
基于
CA
sync
Socket
的非阻塞异步通信。效果图详见:http://blog.chinaunix.net/uid-28394603-id-5163195.html
网络编程
18,357
社区成员
64,165
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章