部分代码如下://.h文件
#ifndef USE_LINKFREE_SOCKET_MFC_
#define USE_LINKFREE_SOCKET_MFC_
class MySocket : public CSocket
{
//attributes
private:
CAsyncSocket *client; //methods
public:
MySocket();
virtual ~MySocket(); virtual void OnAccept(int);
virtual void OnReceive(int);
virtual void OnSend(int);
virtual void OnClose(int nErrorCode);

public:
template<typename TYPE>
void initiaBuffer(TYPE* buffer, int bufLength);
};
#endif USE_LINKFREE_SOCKET_MFC_//.cpp文件
#include "stdafx.h"
#include "LongiLatiServerDlg.h"
#include "LongiLatiServer.h"
#include "MySocket.h"
#include "cy_function_1.h"MySocket::MySocket()
{}MySocket::~MySocket()
{
if(this->client != NULL)
{
delete this->client;
}
}void MySocket::OnAccept(int nErrorCode)
{
this->client = new MySocket();
Accept(*client);
CSocket::OnAccept(nErrorCode);
}void MySocket::OnReceive(int nErrorCode)
{
char *recBuf = new char[16];
initiaBuffer(recBuf, 16); Receive(recBuf, 16);
CSocket::OnReceive(nErrorCode);
Send("have receive you info", strlen("have receive you info"));
}void MySocket::OnSend(int nErrorCode)
{
MessageBox(NULL, "此SOCKET现在可以通过send函数发送数据了", "OnSend_Function", MB_OK);
CSocket::OnSend(nErrorCode);
}void MySocket::OnClose(int nErrorCode)
{
MessageBox(NULL, "远程主机已经关闭的链接", "LongitudeLatitudeServer", MB_OK);
this->client->Close();      //一开始的时候没有这句,就是下面释放对象的语句出错,加了这句就是这句出错
delete this->client; //如果远程主机关闭了链接,那将就将这个对象析构掉--就是这个地方出现了

this->client = NULL;
CSocket::OnClose(nErrorCode);
}template<typename TYPE>
void MySocket::initiaBuffer(TYPE *buffer, int bufLength)
{
for(int i=0; i<bufLength; ++i)
{
*(buffer+i) = *(buffer+i) & 0x00;
}
}

解决方案 »

  1.   

    那个[color=#FF0000]不是程序代码
      

  2.   

    为什么要在MySocket类里创建一个MySocket对象啊.
    当一个MySocket与连接服务器的时候,被接受了,自己跟服务器通信就可以了.只有Socket服务器listen到了一个连接,才回创建一个Socket对象,与客户连接!
      

  3.   

    你写的代码有很大的问题啊!
    void MySocket::OnAccept(int nErrorCode)
    {
        this->client = new MySocket();
        Accept(*client);    
        CSocket::OnAccept(nErrorCode);
    }我再连接一个进来,那么我想向前一个客户端发送信息,怎么办?????
    你还没判断this->client是否为NULL就delete不出错才怪.
      

  4.   

    喀~~上次也是犯的这个错误,在同一个地方竟然犯两次错误...
    改了一下,把CAsyncSocket *client放在了外面,就是一个全局的指针,这回当远程主机关闭链接的时候我再析构掉通信套接字就没有问题了,下面说一下3楼美女提出的问题(看你的头像是女的,不知道是不是,就这样叫咯,呵呵)
    我进行测试的结果是:服务器端,就是我写的这个代码,它会同时接收N个客户的链接,但是,它只会在一个时间“段”处理一个用户的请求,比如每个用户要求服务器数1万个数,服务器会先为第一个客户数到1万,这个中间不会被第二个客户打断(即,不会同时进行数数),等待一个用户处理完毕了再来处理另一个用户的请求,也就是说,服务器接收了用户的请求,但是会其挂起,我的测试可能不是很准确,还望多多指教