在书看看到了一段代码,不是很明白
重载
CAsyncSocket *client;  //定义了一个CAsyncSocket指针对象
CAsyncSocket::OnAccept(client,)
书上直接在OnReceive这个函数里面调用client对象,来接收客户端发送来的数据
但是这里的client没有用create函数和本地端口绑定呀?它怎么能直接用呢?
书上说OnAccept函数可以直接新建一个Socket类,在这里我只能看到了OnAccept来引用这个client指针对象,却看不到Accept是如何创建它的??
我有点不明白!请高手解释一下
谢谢!

解决方案 »

  1.   


    我平常的做法是从csocket派生一个新类,在create的时候绑定端口啊。
    这种方法没见过的
      

  2.   

    不不不
    听说accept这个函数可以自动返回一个套接字
    也就是这样的,我给个例子你看!
    CAsyncSocket *client; //定义一个对象
    CAsyncSocket::OnAccept(client)//在这里系统自动调用accept并返回一个新套接字地址,并把这个值赋给client
    所以这里的client不需要调用create函数,而是accept以经把一个新的套接字地址赋给client了
    我看书上是这么说的,但其实我还是有些不明白的
    *********实际上,在这之前我以经建了一个套接字server并调用了create函数,使它与本地端口999绑定,主机IP:192。168。0。1
    但是在这里accept又新建了一个套接字,这里不会和我原来建的server套接字相冲突吗?
      

  3.   

    还有一个C的问题
    是不是所有的指针类型对象,在用之前都要new一下?

    CAsyncSocket *client=new CAsyncSocket();
    CAsyncSocket *client=new create();
      

  4.   

    new的话,是在堆上存放数据
    需要你手动的释放资源,否则会出现内存泄漏
      

  5.   

    /********************************************************************/
    /* Description   : Notify this listening socket that it can accept */
    /*    pending connection requests. */
    /********************************************************************/
    void CDataSocket::OnAccept(int nErrorCode) 
    {
    CAsyncSocket socky;
    Accept(socky);

    SOCKET socket = socky.Detach();
    Close(); Attach(socket); m_bConnected = TRUE;
    m_pConnectSocket->SendResponse("150 Connection accepted"); CAsyncSocket::OnAccept(nErrorCode);}/********************************************************************/
    void CDataSocket::OnSend(int nErrorCode) 
    {
    CAsyncSocket::OnSend(nErrorCode);
    }void CDataSocket::OnClose(int nErrorCode) 
    {
    CAsyncSocket::OnClose(nErrorCode);
    }
    void CDataSocket::OnReceive(int nErrorCode) 
    {
    CAsyncSocket::OnReceive(nErrorCode);

    Receive();
    }
      

  6.   

    Hotthing(豪星) 大哥:
    你的这段我还不是很明白
    CAsyncSocket socky;  //你还是在这里新建了一个套接字类
    Accept(socky);//在这里accept里面用到 了socky这个对象,但是socky这个对象并没有调用ceate函数来绑定本地端口呀!

    SOCKET socket = socky.Detach();
    Close(); Attach(socket);