1> 在服务端用GetPeerName() 得到的IP和在客户端用 GetSockName()得到的IP不一样,
问什么?哪个是"真"的?
2> 我创建一个新线程来传文件,把一个CMySocket object( derived from CSocket)
的传到此线程,再生成一个新 object m_socket, 大体做法如下:AfxSocketInit();
CMySocket* m_socket = new CMySocket();
m_socket->Attach(ptp->socket);
....//after work done
m_socket->Detach();
delete m_socket;数据可以发送,没问题,而且发完一个文件还可以发送另一个。可问题是当第一次
调用此线程以后,就OnReceive()没反映了,即无法发现socket 里有新数据。多谢了!!!

解决方案 »

  1.   

    在服务端用GetPeerName() 得到的IP是"真"的
    第二个问题我没做过这方面的,只好请教别人
      

  2.   

    有这种可能,通过代理连接,GetPeerName得到的是代理的,clien端通过GetSockName得到的是这个socket自己的ip,这两个是有可能不一样。Attach以后,消息也走CMySocket里面过,也就是说,原先ptp能够得到的消息,现在都被CMySocket *m_socket接管了。
      

  3.   

    To:  liugy(光哥 没有做不到 只有想不到) 在服务端用GetPeerName() 得到的IP是"真"的拿就是说我可以在客户端把这个IP绑定后Listen(), 然后服务端可以连接
    到这个新socket, 也就是建立一个新连接(因为我的程序需要新线程来
    专门传送数据)??
      

  4.   

    To:  oldworm(oldworm)其实在 m_socket->Detach(); delete m_socket; 之前,客户端都没有发
    数据,只是在线程万了以后才发送,但OnReceive() 没有反映, 
    另外,如果再线程里不用上述方法,而用send(),  就一点问题没有,所以我
    猜测一定是 Attach(), Detach() or delete m_socket 出问题。
      

  5.   

    在m_socket->Attach(ptp->socket)之前加一句m_socket->Detach()试试