客户端代码:
消息序列化函数
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吧。
接收到了才调用onreceive吧。
#2
写代码也要用心啊,也要研究下人家的原理啊。
#3
书上的代码很多都有错误,理解原理,自己调试吧.
#4
这个你要调试一下,确定是发送端的问题还是服务端接收的问题。
#5
我在msdn2001里面找了个例子,代码和我写的差不多,可是samples里面的例子能运行,我的程序却怎么也运行不了!!郁闷!!谁能帮我啊,我把代码发给你,帮助调试一下。
#6
差不多,那就是还有不同的地方了,你关注下发送,接收那几个函数那里的使用是不是一样的,还有就是socket的创建
#7
只有直接使用CAsyncSocket的才能用OnReceive,其他任何socket类都不一定行
#8
我怎么没看到执行send发送的代码,眼睛花了...?
#9
ok
这个你要调试一下
这个你要调试一下
#10
why?只有直接使用CAsyncSocket的才能用OnReceive,其他任何socket类都不一定行引用,求赐教!!
#1
CSocket是同步套接字,你需要在专门的接受线程里一直等待接收吧。
接收到了才调用onreceive吧。
接收到了才调用onreceive吧。
#2
写代码也要用心啊,也要研究下人家的原理啊。
#3
书上的代码很多都有错误,理解原理,自己调试吧.
#4
这个你要调试一下,确定是发送端的问题还是服务端接收的问题。
#5
我在msdn2001里面找了个例子,代码和我写的差不多,可是samples里面的例子能运行,我的程序却怎么也运行不了!!郁闷!!谁能帮我啊,我把代码发给你,帮助调试一下。
#6
差不多,那就是还有不同的地方了,你关注下发送,接收那几个函数那里的使用是不是一样的,还有就是socket的创建
#7
只有直接使用CAsyncSocket的才能用OnReceive,其他任何socket类都不一定行
#8
我怎么没看到执行send发送的代码,眼睛花了...?
#9
ok
这个你要调试一下
这个你要调试一下
#10
why?只有直接使用CAsyncSocket的才能用OnReceive,其他任何socket类都不一定行引用,求赐教!!