我测试了服务器 OnAccept() 到的 CSocket ,我发现 CSocket::m_hSocket 对于任何一个CSocket 的Connect() 都不同,另外 OnAccept() 中得到的 SOCKADDR_IN.sin_port 为何与实际端口号不一致?
请高手赐教!!! 不胜感激!!!

解决方案 »

  1.   

    要分清楚监听sock与连接sock的区别
      

  2.   

    "同一 ip 同一端口的两个不同的客户端的 Connect() "可能吗?
    你自己指定的客户端端口吗?都相同不冲突?
      

  3.   

    按照你的题目,CSocket::m_hSocket  是你的侦听的socket句柄,是等待别人连接而设置的socketOnAccept() 会产生新的socket句柄, 是被连接后产生的。
    OnAccept() 中得到的 SOCKADDR_IN.sin_port  是 对方连接你后,你得到的对方的信息。
      

  4.   

    谢谢大家的热心参与,可能是我表述的不够清楚,致使大家误解了我的意思:
    我建立了一个服务监听程序:
    // 大致如下,只是示意并不是精确的源码// 服务器
    CListen:public CSocket{}
    CListen listen;
    listen.Create(6000);// 端口号
    listen.Listen();
    listen.OnAccept()
    {
       CSocket *p;
      SOCKADDR_IN in;
      // 接收客户端联接
      //  SOCKADDR_IN.sin_port 不是 6000 ? }// 客户端
    CSocket s;
    s.Create();
    s.Connet("127.0.0.1", 6000,....);请高手指点,服务器端 SOCKADDR_IN.sin_port 怎末不是 6000 ???!!!
    谢谢,各位的热心参与!!!
    谢谢!!!
      

  5.   

    ushort port = ntohs(SOCKADDR_IN.sin_port)
      

  6.   

    晕倒掉 到现在还是没有看明白你想要表述的意思 
    你客户端创建的CSocket 没有指定端口号 你程序里面只是让他连接服务器的6000端口
    同时你服务器的6000端口上的监听CSocket也接收到了这个CSocket请求 至于客户端的端口号当然不会是6000