zoukankan      html  css  js  c++  java
  • SOCKET API简介三(

        );


    inet_addr返回的是32位的网络字节序的二进制值, 这个函数存在这样的问题,所有2^32可能的二进制都是有效的IP地址(0.0.0.0到255.255.255.255) 但当出错时返回一个常值

    INADDR_NONE(#define INADDR_NONE             0xffffffff),这意味着255.255.255.255不能由此函数处理,

    可以这样使用:

    m_szServerAddr = "255.255.0.1";
    		ULONG inaddr = inet_addr(m_szServerAddr);
    		if (inaddr == INADDR_NONE)
    		{

    inaddr返回的是100FFFF

    struct hostent FAR *
    WSAAPI
    gethostbyname(
        __in const char FAR * name
        );

    此函数用于查找主机名,如果成功,它返回一个指向结构hostent的指针,该结构中包含了该主机的所有IPv4地址或IPv6地址

    localhost 指你所在的计算机本身,所以要查找本机信息,可以这样使用:

    hostent *Localhost = NULL;
    			Localhost = gethostbyname("LocalHost");unsigned long
    WSAAPI
    inet_addr(
        __in IN const char FAR * cp
        );


     

    int
    WSAAPI
    getpeername(
        IN SOCKET s,
        __out_bcount_part(*namelen,*namelen) struct sockaddr FAR * name,
        __inout int FAR * namelen
        );


     返回与套接口关联的远程协议地址.客户端可以用它来获取当前socket连接的服务器IP和端口,如:

    	SOCKADDR_IN sin;
    		sin.sin_family = AF_INET;
    		sin.sin_port = htons(8188);
    		memcpy(&sin.sin_addr, &inaddr, sizeof(inaddr));
    
    		m_socket = socket(AF_INET, SOCK_STREAM, 0);
    		if (INVALID_SOCKET == m_socket)
    		{
    			m_szLastErr = _T("创建套接字失败");
    
    			return FALSE;
    		}
    		
    		if (connect(m_socket, (sockaddr*)&sin, sizeof(SOCKADDR_IN))<0)


    这样创建一个socket,我们再去查询这个socket对应的服务器地址:

    	SOCKADDR_IN sin;
    	int nLen = sizeof(sin);
    	getpeername(pPara->socket, (sockaddr*)&sin, &nLen);


    得到的sin和上面connect 时的sin是一样的。


     

  • 相关阅读:
    拉格朗日插值模板题 luoguP4871
    FFT P3803 [模板]多项式乘法
    codeforces #629 F
    codeforces #629 E-Tree Queries
    数学—线性基
    codeforces #629 D.Carousel
    luogu P1447_能量采集 (莫比乌斯反演)
    luogu P2257- YY的GCD (莫比乌斯反演)
    luogu P2522-Problem b (莫比乌斯反演)
    luogu P3455 (莫比乌斯反演)
  • 原文地址:https://www.cnblogs.com/hgy413/p/3693505.html
Copyright © 2011-2022 走看看