我从CAsyncSocket继承了一个类MySocket
重载了 这几个函数: OnAccept、OnClose、OnConnect、OnReceive、OnSend
实现很简单 就是弹出一个对话框(还在 OnReceive中接收数据) 如:void MySocket::OnClose(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
::AfxMessageBox(L"OnClose");
CAsyncSocket::OnClose(nErrorCode);
}
在客户端用该类想实现以下最基本的功能:
1:连接到服务器上;
2:向服务器发送数据;
3:接收服务器发送的数据;
4:与服务器断开连接;现在 用该类的 Connect方法连接到服务器上后 可以发送与接收数据就是不能与服务器断开连接,
调用 Close() 后没有弹出"OnClose"对话框, 部分代码如下:g_pMySocket 为全局的MySocket对象已经在对话框的 OnInitDialog 中调用过 Create// 连接到服务器或与服务器断开连接
// 如果当前正在连接则断开
void CClientDlg::OnBnClickedButtonConnection()
{
this->UpdateData(TRUE);
//::memset(this->btTemp, 0, sizeof(this->btTemp));
// 单击按钮之前正处于连接状态
if(::g_blConnection) // g_blConnection 用于记录当前是连接还是已经断开
{
// 断开与服务器的连接
//g_pMySocket->Detach(); //
g_pMySocket->Close(); // 关闭时会执行该行
//g_blConnection = FALSE; // 在OnClose中如果关闭成功才设为FALSE
//g_pMySocket->KillSocket(::g_pMySocket->m_hSocket, (CAsyncSocket* )g_pMySocket);// 调用时出错
}
else
{
// 连接到服务器
this->m_ipaddSrv.GetWindowTextW(strTemp);
g_pMySocket->Connect(strTemp, this->m_uPort);
this->SetDlgItemTextW(IDC_BUTTON_CONNECTION, L"连接...");
}
}问题就是无法与服务断开连接 g_pMySocket->Close(); 已经调用 但g_pMySocket的OnClose没执行(把服务端进程关了也不行)
请问是什么原因啊??
小弟是个菜鸟昨天刚学socket编程, 请教前辈以上问题是什么原因造成的, 还有对socket初学者来说应该注意些什么??
重载了 这几个函数: OnAccept、OnClose、OnConnect、OnReceive、OnSend
实现很简单 就是弹出一个对话框(还在 OnReceive中接收数据) 如:void MySocket::OnClose(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
::AfxMessageBox(L"OnClose");
CAsyncSocket::OnClose(nErrorCode);
}
在客户端用该类想实现以下最基本的功能:
1:连接到服务器上;
2:向服务器发送数据;
3:接收服务器发送的数据;
4:与服务器断开连接;现在 用该类的 Connect方法连接到服务器上后 可以发送与接收数据就是不能与服务器断开连接,
调用 Close() 后没有弹出"OnClose"对话框, 部分代码如下:g_pMySocket 为全局的MySocket对象已经在对话框的 OnInitDialog 中调用过 Create// 连接到服务器或与服务器断开连接
// 如果当前正在连接则断开
void CClientDlg::OnBnClickedButtonConnection()
{
this->UpdateData(TRUE);
//::memset(this->btTemp, 0, sizeof(this->btTemp));
// 单击按钮之前正处于连接状态
if(::g_blConnection) // g_blConnection 用于记录当前是连接还是已经断开
{
// 断开与服务器的连接
//g_pMySocket->Detach(); //
g_pMySocket->Close(); // 关闭时会执行该行
//g_blConnection = FALSE; // 在OnClose中如果关闭成功才设为FALSE
//g_pMySocket->KillSocket(::g_pMySocket->m_hSocket, (CAsyncSocket* )g_pMySocket);// 调用时出错
}
else
{
// 连接到服务器
this->m_ipaddSrv.GetWindowTextW(strTemp);
g_pMySocket->Connect(strTemp, this->m_uPort);
this->SetDlgItemTextW(IDC_BUTTON_CONNECTION, L"连接...");
}
}问题就是无法与服务断开连接 g_pMySocket->Close(); 已经调用 但g_pMySocket的OnClose没执行(把服务端进程关了也不行)
请问是什么原因啊??
小弟是个菜鸟昨天刚学socket编程, 请教前辈以上问题是什么原因造成的, 还有对socket初学者来说应该注意些什么??
解决方案 »
- VS2005 Find In Files 按钮无法使用
- 如何获取窗口标题中含某种特征字符串的窗口句柄
- dshow初始化失败的问题?或如何刷新使用dshow播放的动画
- 一个简单的多线程的问题
- 关于list问题,这样写对吗?在线等待
- mfc里面怎样访问注册表?(建立,读,写键值)
- 请教高手!
- 打印 排列组合1-n ?谢谢!
- Gdi+中Bitmap类的使用。
- ************急救*************怎么控制光标在一个EDIT BOX里的任意一个位置!
- 请问将mfc程序 放到没有装vc的机器上如何运行?
- 请问windows下标准的滚动条控件的拖动条的大小和控件的最大值最小值以及控件的尺寸大小之间的数学关系是大概是如何的啊。
在头文件中申明MySocket* g_pMySocket=NULL;在程序的 InitInstance() 中分配空间g_pMySocket=new MySocket();Create() 是在对话框中的 OnInitDialog 中调用的
pSocket->ShutDown(CAsyncSocket::both);
pSocket->Close();还有,你的代码能够使客户端与服务器端断开,服务器端会收到断开消息,如果服务器端你用的是该类,那么服务器端OnClose会执行。同样,服务器端停止,你的客户端可以收到断开消息,客户端OnClose会执行。