我希望客户正常退出前能发给服务端下线消息所以写了以下代码:服务端接收部分判断:
void fuwuduanReceive::OnReceive(int nErrorCode)
{
if(str==_T("woxiale"))
{
CString name_desu;
arIn>>name_desu;
arIn.Close();
int o=m_pR->m_list.GetCount();
int counting_go=0;
for(int u=0;u!=o;++u)
{
CString word_to;
m_pR->m_list.GetText(u,word_to);
if(name_desu==word_to)
counting_go=u;
}
m_pR->m_list.DeleteString(counting_go);
m_pR->m_out+=name_desu;
m_pR->m_out+=_T("已下线!\r\n");
m_pR->UpdateData(FLASE);
}
}客户端发送部分:
void CkehuduanDlg::OnDestroy()
{
CSocketFile file(&MySocket);
CArchive arOut(&file,CArchive::store);
CString word(_T("woxiale"));
arOut<<word;
arOut<<name;
arOut.Close();//这句和arOut.Flush()加与不加一样结果
CDialog::OnDestroy();
// TODO: 在此处添加消息处理程序代码
}
然后一触发就狂弹出断言错误An attempt was made to access an unnamed file past its end,即过界了,是不是窗口销毁就不能发送的了啊?哎~~~谁来救救我啊!!!!该怎么改啊?????
void fuwuduanReceive::OnReceive(int nErrorCode)
{
if(str==_T("woxiale"))
{
CString name_desu;
arIn>>name_desu;
arIn.Close();
int o=m_pR->m_list.GetCount();
int counting_go=0;
for(int u=0;u!=o;++u)
{
CString word_to;
m_pR->m_list.GetText(u,word_to);
if(name_desu==word_to)
counting_go=u;
}
m_pR->m_list.DeleteString(counting_go);
m_pR->m_out+=name_desu;
m_pR->m_out+=_T("已下线!\r\n");
m_pR->UpdateData(FLASE);
}
}客户端发送部分:
void CkehuduanDlg::OnDestroy()
{
CSocketFile file(&MySocket);
CArchive arOut(&file,CArchive::store);
CString word(_T("woxiale"));
arOut<<word;
arOut<<name;
arOut.Close();//这句和arOut.Flush()加与不加一样结果
CDialog::OnDestroy();
// TODO: 在此处添加消息处理程序代码
}
然后一触发就狂弹出断言错误An attempt was made to access an unnamed file past its end,即过界了,是不是窗口销毁就不能发送的了啊?哎~~~谁来救救我啊!!!!该怎么改啊?????
解决方案 »
- 明明有声明,老提示链接错误,快被整疯了,高手帮解答下。error LNK2001: unresolved external symbol _CsrClientC
- MFC
- 编写视频监控后台管理软件,用哪种界面库好
- 如何关闭模态对话框
- 如何设计这样的系统?
- 小弟,最近要写一个文件分析方面的程序 ,,,就是判断文件类型的程序,,,有没有那位大虾 ,,有这方面的资料或者给个思路也行,,哎,,文件类型那
- 在vc中用什么控间画柱状图和走势图最好啊?
- 物联网发展方向
- 一个函数总是出现CXX0030: 错误: 无法计算表达式的值
- vc++ 到底能干什么?
- Cstring类
- 为什么我的编辑框只能写进去3万个字节
void fuwuduanReceive::OnReceive(int nErrorCode)
{
if(str==_T("woxiale"))
{
CString name_desu;
arIn>>name_desu;
arIn.Close();
int o=m_pR->m_list.GetCount();
int counting_go=0;
for(int u=0;u!=o;++u)
{
CString word_to;
m_pR->m_list.GetText(u,word_to);
if(name_desu==word_to)
counting_go=u;
}
m_pR->m_list.DeleteString(counting_go);
m_pR->m_out+=name_desu;
m_pR->m_out+=_T("已下线!\r\n");
m_pR->UpdateData(FLASE);
}
}客户端发送部分:
void CkehuduanDlg::OnDestroy()
{
CSocketFile file(&MySocket);
CArchive arOut(&file,CArchive::store);
CString word(_T("woxiale"));
arOut<<word;
arOut<<name;// 不加也是错的 CDialog::OnDestroy();
// TODO: 在此处添加消息处理程序代码
}
在OnClose里试试
void CkehuduanDlg::OnDestroy()
{
CSocketFile file(&MySocket);
CArchive arOut(&file,CArchive::store);
CString word(_T("woxiale"));
arOut<<word;
arOut<<name;
Sleep(100);//加上这个就可以了,原因是还没发过去确认就断开了,TCP认为是不合法的
CDialog::OnDestroy();
// TODO: 在此处添加消息处理程序代码
}