wchar_t *buf = new wchar_t(15);
u_long a = 1955339436;
BYTE *cp = (BYTE *)&a;
(void) swprintf(buf, L"%u.%u.%u.%u", cp[0], cp[1], cp[2], cp[3]);
//获取主机的信息
LPHOSTENT hostEntry;
char hostname[MAX_NUM_BUF];
gethostname(hostname,MAX_NUM_BUF); //获取主机名称
hostEntry = gethostbyname(hostname); //获取主机信息
if(!hostEntry)
{
ShowErrorMsg(); //显示错误信息
return ExitClient(CLIENT_API_ERROR); //退出
}
//设置sockaddr_in
SOCKADDR_IN addrServ;
addrServ.sin_family = AF_INET;
addrServ.sin_addr = *((LPIN_ADDR)*hostEntry->h_addr_list);
addrServ.sin_port = htons(SERVERPORT);
//客户端地址设置
四、几个需要注意的函数
(1)IP地址相关,inet_addr()和inet_ntoa()
用法:inet_addr(“127.0.0.1”);将点分十进制记的IP地址转换成为网络字节序的S_addr类型的IP地址
inet_ntoa(addrClient.sin_addr);将网络字节序的S_addr类型的IP地址转换成为点分十进制记的IP地址
(2)端口号相关,htonl()和htons()
用法:htonl(INADDR_ANY);把一个u_long类型的值从主机字节序转换成为TCP/IP网络字节顺序
htons(6000);把一个u_short类型的值从主机字节序转换成为TCP/IP网络字节顺序
INADDR_ANY这个宏的值就是0,转换之后仍然是0
1 为了标识通信实体中进行通信的进程(应用程序),TCP/IP协议提出了协议端口的概念
2. 端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)。应用程序通过系统调用和某端口建立连接(binding)后,传输层传给该端口的数据都被相应的进程所接收,相应进程发给传输层的数据都通过该端口输出
3. 端口用一个整数型标识符来表示,即端口号。端口号跟协议相关,TCP/IP传输层的两个协议TCP和UDP是完全独立的的两个软件模块,因此各自的端口号也相互独立