计算机二级C++基础:新手Socket编程总结

计算机二级C++基础:新手Socket编程总结,第1张

计算机二级C++基础:新手Socket编程总结,第2张

下面是给初学者的一点关于Socket编程的知识
。先看一段代码:
/
WORD wVersionRequested在一般网络编程的开头;
wsa data wsa data;
int err;
wVersionRequested = make word(1,1);
err = wsa startup(wVersionRequested,& wsa data);
如果(err!= 0){
return;
}
if(LOBYTE(wsa data . w version)!= 1 | |
hi byte(wsa data . w version)!= 1)
{
WSACleanup();
退货;
}
/以上功能主要是为了和WSA等进行交互。并确定版本号
Next
socket sock client = socket(AF _ inet,sock _ stream,0);
Socket (af _ inet,SOCK_STREAM,)函数它规定它的AddrssFamily是互联网,它使用sock _ stream模式(也就是TCP),最后一个0是默认参数。它会自动为您选择一个协议。
调用成功,会返回一个套接字描述符
接下来,这句话
SOCKADDR _ IN addr SRV;
我查了一下MSDN的原解释如下
在Internet地址族中,SOCKADDR_IN结构被Windows Sockets用来指定一个套接字要连接的本地或远程端点地址。
//socdr _ in结构的定义
struct sockaddr _ in {
short sin _ family;
无符号短整型sin _ port
struct in _ addr sin _ addr;
char sin _ zero[8];
};
//其中in_addr定义如下
struct in _ addr {
union {
struct {
unsigned char S _ B1,
s _ b2,
S
} S _ un _ b;//这应该意味着结构联合字节。
struct {
无符号短整型s _ w1,
s _ w2以字节为单位;
} S _ un _ w;//对
无符号长S_addr使用word//long for
} S _ un;
};
SOCKADDR _ IN定义后可以赋值
addr SRV . sin _ addr . s _ un . s _ addr = htonl(IN addr _ any);//host to net long:)可能这个
addr SRV . sin _ family = AF _ INET;
addr SRV . sin _ port = htons(6000);
上面出现了两个函数
inet _ addr();以及将出现在客户端上的
htonl()和
htons();
inet _ addr()函数MSDN的解释很清楚:
“inet _ addr函数将包含(IPv4)互联网协议点地址的字符串转换为IN_ADDR结构的正确地址。”
htonl()
" htonl函数将一个u _ long从主机转换为TCP/IP网络字节顺序(大端字节顺序)。"
and htons()is
" htons函数将一个u _ short从主机转换为TCP/IP网络字节顺序(大端顺序)。"
显然,htonl()将长类型转换为网络字节序,而htons()则转换为短类型。
需要注意的是,S_addr是4字节,而sin_port是2字节。正是因为这种不同,他们调用的函数也不同
。然后,bind和listen
bind (socksrv,(sockaddr *)&
listen(sock SRV,5);
看了一段时间,才明白bind第二个参数的意思,当然是我自己的理解。不知道对不对。请指正。
sockadd的结构定义如下
structsockaddr {
u _ shortsa _ family;
char sa _ data[14];
};
按照MSDN的解释,前两个字节肯定是AddrssFamily,我觉得char sa_data[14]是作为占位符,在14个字节的空之间点击。这样做是因为addrssFamily有很多类型,每种类型的数据都不一样,这是为了兼容而定义的。
bind()的第三个参数是指第二个参数的大小。14字节+2是16字节,而sockadd_in我算了一下也是16字节。
bind的意图很明显。"使用bind函数通过给未命名的套接字分配一个本地名称来建立套接字的本地关联."这里的名字指的是sockadd_in(包括addr_family,port,addrsss

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 计算机二级C++基础:新手Socket编程总结

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情