全局函数ThreadLan()
CString sClientIP      =  "202.114.23.6";
UINT sClientPort    =  4000;
m_Client.Init(this);
m_Client.Create();
m_Client.Connect(sClientIP,sClientPort);
CString sInfo="HIST";
m_Client.SendCmd(sInfo);//消息可以发送出去,但是却接不到服务器端发回来的消息
郁闷了,哪位兄弟指点指点吧,我实在搞不懂了!

解决方案 »

  1.   

    后来我想可能是现程结束以后,里面定义的变量就丢失了!
    不知道是不是这么回事?
    如果是这么回事,那么怎样可以让线程函数里面定义的变量一直存在呢?
    后来我又试着把m_Client定义成父类的公共成员变量,
    结果还是这样,郁闷ing
      

  2.   

    以前也碰到过类似的问题,CSocket 里面好象用了线程局部变量,所以在多线程程序中会出现很多问题。
      

  3.   

    由于你的CSocket是非组塞的,同时是和窗口句并来管理I/O,有数据到来的时候,WINDOWS会通知对应
    的窗口,发送消息,而你的CSOCKET在线程中,没有办法得到WINDOWS发给窗口的通知,
    除非你在线程中GetMessage()进行消息循环。
      

  4.   

    我也遇到过同样的问题,完全同意sunhuino1的说法,解决的办法一是在线程进行消息循环getMessage(),简单的办法是send 以后调用OnReceive,但如果对方不回答的话你的线程就停住了,最好改造成超时能返回
      

  5.   

    我也碰到过 不过在 函数中加入 MessageBox 后就能运行 还发现 只要是调用了窗口对象的成员函数后都能正常运行
      

  6.   

    CSocket通过窗口消息进行处理,而窗口的消息处理只能在窗口消息线程中处理。所以你在多线程处理中处理就失败了。。