一、服务器绑定函数需要使用此结构体。
比如:
//绑定地址
bool CListenSocket::Bind(UINT uPort)
{
sockaddr_in SocketAddr;
::memset(&SocketAddr,0,sizeof(SocketAddr));
SocketAddr.sin_family=AF_INET;
SocketAddr.sin_addr.s_addr=INADDR_ANY;
SocketAddr.sin_port=htons(uPort);
return (::bind(m_hSocket,(SOCKADDR*)&SocketAddr,sizeof(SocketAddr))!=SOCKET_ERROR);
}
填充这个结构体我们通常只关心以上三个参数,特别是IP地址和端口号。IP地址的赋值有多种方式:
(1)SocketAddr.sin_addr.s_addr=INADDR_ANY;默认为本机IP地址
(2)SocketAddr.sin_addr.s_addr = inet_addr(inet_ntoa(*(struct in_addr *)p->h_addr_list[0]));如果本机有几个IP地址,以获取到的第一个IP地址为服务器地址
(3)SocketAddr.sin_addr.s_addr = inet_addr(“192.168.2.183”);常用的方法,以字符串设置IP地址
二、服务器accept函数接收到连接以后解析客户端信息需要用到这个结构体
比如:
NewConnection = accept(ListeningSocket, (SOCKADDR *) &ClientAddr,&ClientAddrLen)
printf("We successfully got a connection from %s:%d.\n",inet_ntoa(ClientAddr.sin_addr), ntohs(ClientAddr.sin_port));
我们通常接受到客户端连接以后需要解析IP和端口号