您的位置:首页 > 其它

SOCKET API简介三(

2012-06-13 17:17 218 查看
);


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是一样的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: