还有,我在线程中new了一个socket,发现只能发送信息,
不能接收信息,这是为什么?
即声明为app的成员变量,为socket指针,在线程中对该指针进行实例

解决方案 »

  1.   

    Socket本身提供不提供代理的机制,还是自己要做一个前置端程序?
      

  2.   

    第一:你为什么要用SetTimmer呢,用WSASelect()或者select()函数不是更好?
    第二:侦测一个connection是否物理断开,你是说对方的主机是否开机?还是你的一个tcp connection是否存在,如果是后者可以发送1 byte的字节,看看对方是否受到,当然这个只能对tcp有用。
    第三:Socket自己是不考虑任何代理的情况。如果你要用代理可以推荐你一个类www.codeguru.com下有一个人写了一个sock5的包装类。不错的。
      

  3.   

    对于第一个问题,简单地说,就是如何将OnConnect事件的结果向上传递?
    我的类是这样的
    CServerSocket  public : CAsyncSocket
    CClientSocket  public : CAsyncSocket
    CClientSocket连接成功的反馈一定在CClientSocket::OnConnect中
    关键在于,另外的app函数使用了CClientSocket类时,如何得到 OnConnect中的反馈呢
      

  4.   

    给你的类添加OnAccept()虚函数就可以了。。可通过类向导添加,很方便的。
    void CSListen::OnAccept(int nErrorCode) 
    {
    pRef->Accept();
    CAsyncSocket::OnAccept(nErrorCode);
    }
    void CTrans::Accept()
    {
    pConnect=new CSConnect(this);
    pListen->Accept(*pConnect);
    }
    CAsyncSocket封装了消息机制的,不需要手工添加
      

  5.   

    实际我发现:
    1.SetTimer不能在线程中调用,否则不起作用
    2.Socket不能在线程中创建,否则有问题
    实际我的做法是想提供Client.ConnectServer()调用的方式,即封装函数本身等待反馈才继续
    执行
      

  6.   

    1,Settimer可以在线程中调用,处理消息函数是PreTranslateMessage不是ontimer
    BOOL CmyThread::PreTranslateMessage(MSG* pMsg) 
    {
    // TODO: Add your specialized code here and/or call the base class
    if(pMsg->message==WM_TIMER)
    {
    KillTimer(NULL,pMsg->wParam);
    }
    return CWinThread::PreTranslateMessage(pMsg);
    }
    2,Socket也可以在线程中使用!!!!!!
      

  7.   

    1。创建一个CWaitDlg,在对话框中settimer,
    2.增加参数app->m_bFlag=false;
    3.在csock::OnReceive中如果有消息收,则app->m_bFlag=true;
    4.在CWaitDlg中每隔一秒检查一次app->bFlag,
      if(app->bFlag)
           CDiaog::OnOK();
    5.建议在CWaitDlg中加动画表示进行中