CSocketFile,CSocket,CArchive写的聊天室,服务器端OnReceive收不到消息?

时间:2021-07-31 17:01:02
问题如上,我是学习田大新的vc视频,模仿制作的,但是客户端发来的消息,就是接收不到,奇怪!
客户端代码:
消息序列化函数
void CMsg::Serilize(CArchive &ar)
{

if(ar.IsStoring())
{
ar<<code;
ar<<(WORD)m_bClose;
ar<<m_strText;
}
else
{
ar>>(UINT)code;
WORD wd;
ar>>wd;
m_bClose = (BOOL)wd;
ar>>m_strText;
}
}

发送消息函数:
void CChatClientDoc::SendMsg(CString &strText, int mCode, BOOL bSendName)
{
if(m_pArchiveOut!=NULL)
{
CMsg msg;
msg.code = mCode;
msg.m_strText=(bSendName?m_strName+_T(":")+strText:strText);
TRY
{
msg.Serialize(*m_pArchiveOut);//我跟踪执行到了这里。
m_pArchiveOut->Flush();
}
CATCH(CFileException,e)
{
m_pArchiveOut->Abort();
delete m_pArchiveOut;
m_pArchiveOut = NULL;
CString strTemp;
strTemp.Format("发送失败");
DisplayMsg(strTemp);
}
END_CATCH
}

}
服务器端代码
//这段代码总是不响应
void CClientSocket::OnReceive(int nErrorCode) 
{
// TODO: Add your specialized code here and/or call the base class

CSocket::OnReceive(nErrorCode);
m_pDoc->ProccssReceive(this);
}

10 个解决方案

#1


CSocket是同步套接字,你需要在专门的接受线程里一直等待接收吧。
接收到了才调用onreceive吧。

#2


写代码也要用心啊,也要研究下人家的原理啊。

#3


书上的代码很多都有错误,理解原理,自己调试吧.

#4


这个你要调试一下,确定是发送端的问题还是服务端接收的问题。

#5


我在msdn2001里面找了个例子,代码和我写的差不多,可是samples里面的例子能运行,我的程序却怎么也运行不了!!郁闷!!谁能帮我啊,我把代码发给你,帮助调试一下。

#6


差不多,那就是还有不同的地方了,你关注下发送,接收那几个函数那里的使用是不是一样的,还有就是socket的创建

#7


只有直接使用CAsyncSocket的才能用OnReceive,其他任何socket类都不一定行
引用 5 楼 csdnhbc20 的回复:
我在msdn2001里面找了个例子,代码和我写的差不多,可是samples里面的例子能运行,我的程序却怎么也运行不了!!郁闷!!谁能帮我啊,我把代码发给你,帮助调试一下。

#8


我怎么没看到执行send发送的代码,眼睛花了...?

#9


ok
这个你要调试一下

#10


引用 7 楼 arong1234 的回复:
只有直接使用CAsyncSocket的才能用OnReceive,其他任何socket类都不一定行引用 5 楼 csdnhbc20 的回复:我在msdn2001里面找了个例子,代码和我写的差不多,可是samples里面的例子能运行,我的程序却怎么也运行不了!!郁闷!!谁能帮我啊,我把代码发给你,帮助调试一下。

why?只有直接使用CAsyncSocket的才能用OnReceive,其他任何socket类都不一定行引用,求赐教!!

#1


CSocket是同步套接字,你需要在专门的接受线程里一直等待接收吧。
接收到了才调用onreceive吧。

#2


写代码也要用心啊,也要研究下人家的原理啊。

#3


书上的代码很多都有错误,理解原理,自己调试吧.

#4


这个你要调试一下,确定是发送端的问题还是服务端接收的问题。

#5


我在msdn2001里面找了个例子,代码和我写的差不多,可是samples里面的例子能运行,我的程序却怎么也运行不了!!郁闷!!谁能帮我啊,我把代码发给你,帮助调试一下。

#6


差不多,那就是还有不同的地方了,你关注下发送,接收那几个函数那里的使用是不是一样的,还有就是socket的创建

#7


只有直接使用CAsyncSocket的才能用OnReceive,其他任何socket类都不一定行
引用 5 楼 csdnhbc20 的回复:
我在msdn2001里面找了个例子,代码和我写的差不多,可是samples里面的例子能运行,我的程序却怎么也运行不了!!郁闷!!谁能帮我啊,我把代码发给你,帮助调试一下。

#8


我怎么没看到执行send发送的代码,眼睛花了...?

#9


ok
这个你要调试一下

#10


引用 7 楼 arong1234 的回复:
只有直接使用CAsyncSocket的才能用OnReceive,其他任何socket类都不一定行引用 5 楼 csdnhbc20 的回复:我在msdn2001里面找了个例子,代码和我写的差不多,可是samples里面的例子能运行,我的程序却怎么也运行不了!!郁闷!!谁能帮我啊,我把代码发给你,帮助调试一下。

why?只有直接使用CAsyncSocket的才能用OnReceive,其他任何socket类都不一定行引用,求赐教!!