关于CSocket类
1
当客户端连接完服务器后,什么时候调用receive函数,是不是自动调用?
2 我在服务器端接受数据时是这么写的:
do {
CMsg *pMsg=ReadMsg(pSocket);
if(pMsg==NULL)
return;
} while(pSocket->m_pArchiveIn->IsBufferEmpty());
ReadMsg函数用来发送数据,可是当服务器运行时,坠入了死循环,这该怎么处理?要让服务器既能接受数据,也可同时作一些其他操作
问题点数:10、回复次数:9Top
1 楼jishufenxi(天高云淡)回复于 2005-07-07 12:00:30 得分 0
1、连接建立之后就可以调用receive,接收到数据这个函数才返回。
2、用多线程Top
2 楼rockersz(世上的无奈需要我去忍耐...)回复于 2005-07-07 12:02:20 得分 0
把那个循环放到线程中执行Top
3 楼youhaodeyi(友好的翼)回复于 2005-07-07 12:35:43 得分 0
不放到线程中就不行了吗?我从网上下载了一个聊天的程序,它就是这么写的,可我看不懂为什么没有坠入死循环。这个论坛好像不能上传程序吧,要不应该给你们看看那个程序
receive是自动接受还是人工调用?Top
4 楼leposy()回复于 2005-07-07 17:18:17 得分 0
调用receive的话应该是阻塞的,只有收到数据才会返回。
你可以建一个自己的类继承CSocket类,然后重载OnReceive()函数就可以了,只要有收到数据就会自动触发该函数Top
5 楼youhaodeyi(友好的翼)回复于 2005-07-08 14:51:16 得分 0
是呀,我就是在OnReceive中写的这些代码,可是它总是循环执行。Top
6 楼ihavenoidea(正)回复于 2005-07-08 21:28:56 得分 10
while( ! pSocket->m_pArchiveIn->IsBufferEmpty());
不是应该加个 ! 吗?Top
7 楼youhaodeyi(友好的翼)回复于 2005-07-10 08:53:53 得分 0
好了,是应该加一个!,可是我不明白OrReceive函数什么时候被调用,他们说是系统自动调用,那么系统到底在什么情况下调用呢?还是不停的调用?还是隔一段时间调用一次?请教Top
8 楼mrxwh(大徐)回复于 2005-07-11 11:06:19 得分 0
ONRECEIVE()是在接到数据后,进行调用的。就像MSCOMM控件的ONCOMM()函数一样。Top
9 楼yzkzero()回复于 2005-07-11 11:21:08 得分 0
当套接字缓冲区有数据了,就会触发的Top




