多谢

解决方案 »

  1.   

    accept  中后两个参数.
    当 accept 成功返回时, 如果第二个参数不为空, 则系统会把客户IP 和端口复制给你
      

  2.   

    如果你有socket句柄,api函数getpeername可以取得对方的ip地址和端口。
      

  3.   

    多谢2位。
    accept的参数是可以返回信息,但是从SOCKADDR结构取出并转换成字符串不太会处理,希望您能多讲几句。最好能有个例子。getpeername得到的也是SOCKADDR结构,不过在您启发下,发现CAsyncSocket::GetPeerName可以返回字符串形式的IP和数字形式的port。总算解决问题。再次表示感谢。
      

  4.   

    to HelloWorld转换为字符串函数:inet_ntoa
      

  5.   

    端口:先用 ntohs 转换端口为主机字节顺序, 然后问题就归结于将一个无符号 16 位转换成字符串, 有很多函数可以做到, 你也可以写一个, 我常用的是 sprintf, wsprintf
      

  6.   

    端口数据取哪个字节啊?sockaddr.sa_data的前2个?结果不对啊?
      

  7.   

    struct sockaddr_in {
            short   sin_family;
            u_short sin_port;
            struct  in_addr sin_addr;
            char    sin_zero[8];
    };sin_port 即是端口
      

  8.   

    那就是sockaddr.sa_data的前2个字节,转换后与用CAsyncSocket::GetPeerName取的端口不一样,奇怪?!
      

  9.   

    还是我的转换有错误,把sockaddr换成sockaddr_in 就没问题了。多谢你这么有耐心。