项目中的用到了CAysncSocket这个类,进行了封装了。代码是别人写的。这个类是异步类,connect后,不能根据返回值来进行判断, 功能:点击连接按钮,  套接字去连接服务器,连接成功就发送一个认证包给服务器。//已经定下来了,是客户端发送认证给服务器
由于不知道何时连接成功。 导致不知道何时发送。所以项目中做了一个很二的做法:void CXXDialog::OnBtnConnect()
{mysocket.connect(..);
//创建接受数据线程
//创建其他线程
}
//多次设置断点,发现,只要连接后,这个函数被触发
void CMysocket::OnSend(int nErrcode)
{
m_pDlg->OnSend(int nErrcode);}void  CXXDialog::OnSend(int nErrcode)
{mysocket.send(,,); 发送一个认证包给服务器}
1.如何判断是否成功连接
2.何时创建接受数据线程

解决方案 »

  1.   

    1.如何判断是否成功连接mysocket.connect(..);Nonzero if the function is successful; otherwise 0, and a specific error code can be retrieved by calling GetLastError每一个创建你都是一个独立的线程!!这样创建成功的就独立接受数据了!!
      

  2.   

    我又写了一个简单的小程序,则是贴代码:
    // TODO: Add your control notification handler code here
    if (0 == m_Conn.Connect("127.0.0.1",1500))
    {
    GetDlgItem(IDC_BTN_CONNECT)->EnableWindow(FALSE);
    GetDlgItem(IDC_BTN_SEND)->EnableWindow(TRUE); GetDlgItem(IDC_BTN_CLOSE)->EnableWindow(TRUE);
    }
    这种法子是错误的,无法正确获得不过意外的是,我找了正确的方法了void CClientSock::OnConnect(int nErrorCode) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if (0 == nErrorCode)
    {
    m_pDlg->OnConnected();  //可以这对话框类的这个函数创建线程
    //根据nErroCode来判断是否连接成功
    }
    CAsyncSocket::OnConnect(nErrorCode);
    int i=2;
    i++;
    }
    void CClientSock::OnSend(int nErrorCode)
    {
    MessageBox(NULL,"xx","yy",MB_OK);
    }当连接后,客户端会触发OnConnect 然后进入OnSend
      

  3.   

    异步的,我觉得不能根据返回值,比如 发送消息给对方,很是麻烦。当客户发送消息后,不能根据CClientSock::OnSend来判断是否成功
      

  4.   

    连接,发送,都是根据返回值来判断的!!TCP连接,UDP连接是有区别的!!
      

  5.   

    我的是tcp
    // TODO: Add extra initialization here
    m_Conn.SetDlg(this);
    if (m_Conn.Create())
    {
    }
    else
    {
    MessageBox("创建Socket失败!");
    }
    GetDlgItem(IDC_BTN_CLOSE)->EnableWindow(FALSE);
    GetDlgItem(IDC_BTN_SEND)->EnableWindow(FALSE);
    return TRUE;  // return TRUE  unless you set the focus to a control
    }
    默认tcp
      

  6.   

    回复于:2003-08-29 10:20:55因为你用的是非阻塞方式   socket,所以你的连接一般情况下不会立刻响应,你不该这样写代码: 
          给你个解决办法,在m_ClientSocket的类的OnConnect()事件中处理你连接问题:在OnConnect事件中,你可以知道连接是成功还是失败,然后在处理。 
    http://topic.csdn.net/t/20030829/08/2200488.html
    第5楼
      

  7.   

    不是有个OnConnect吗,可重写的。当它被调用的时候,就连接成功了。
      

  8.   

    你好,我记得你几年前发过boost的问题asio方便留Q, 有空讨论技术嘛
      

  9.   

    几年前?我最近发布了一个包装boost.asio的资源,还有三篇教程,从我的资源我博客中看吧。源代码中有我的QQ和邮箱。
      

  10.   

    1: your application is using the overridable callbacks, your application will receive an OnConnect message when the connect operation is complete. The following errors apply to this member function:
    2: onsend 表明套接字可以发送数据了。
    都表明你连接成功了。
     
      

  11.   

    连接成功后,onconnect, onsend都会被调用。
    AysncSelect成员函数设置后,
    主动发送消息,那么 onsend也会触发。
    接受线程,应该在 onconnnect中创建,