Socket编程小结
来源:互联网 发布:软件测试 郑人杰 编辑:程序博客网 时间:2024/04/29 19:26
- //一般网络编程开头都会有的
- WORD wVersionRequested;
- WSADATA wsaData;
- int err;
- wVersionRequested=MAKEWORD(1,1);
- err=WSAStartup(wVersionRequested,&wsaData);
- if(err!=0){
- return;
- }
- if( LOBYTE(wsaData.wVersion)!=1||
- HIBYTE(wsaData.wVersion)!=1)
- {
- WSACleanup();
- return;
- }
- //以上的功能主要是和WSA等进行交互,确定版本号等
- SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
- SOCKADDR_IN addrSrv;
In the Internet address family, the SOCKADDR_IN structure is used by Windows Sockets to specify a local or remote endpoint address to which to connect a socket.
- //sockaddr_in结构体的定义
- struct sockaddr_in{
- short sin_family;
- unsigned short 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_b3,
- s_b4;
- } S_un_b;//这个应该是表示struct union byte以字节表示
- struct {
- unsigned short s_w1,
- s_w2;
- } S_un_w;//以word表示
- unsigned long S_addr;//以long表示
- } S_un;
- };
- addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//host to net long : )Maybe this
- addrSrv.sin_family=AF_INET;
- addrSrv.sin_port=htons(6000);
上面出现两个函数
inet_addr();和
htonl()以及将要在客户端出现的
htons();
关于inet_addr()函数MSDN解释的很清楚了:
"The inet_addr function converts a string containing an (Ipv4) Internet Protocol dotted address into a proper address for the IN_ADDR structure."
htonl()
"The htonl function converts a u_long from host to TCP/IP network byte order (which is big endian)."
而htons()则为
"The htons function converts a u_short from host to TCP/IP network byte order (which is big-endian)."
很明显,htonl()将long类型转换成网络字节序,而htons()则转换short类型.
需要注意的是S_addr是4个byte,而sin_port是2个byte,正是因为这个差异导致它们调用不同的函数
接着,做绑定和监听操作
- bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
- listen(sockSrv,5);
SOCKADD的结构体定义如下
- struct sockaddr {
- u_short sa_family;
- char sa_data[14];
- };
按照MSDN的解释,头两个字节必须要是AddrssFamily,我想char sa_data[14]是起到一个占位符的作为,点了14个字节的空间。这么做,是因为addrssFamily有很多类型,各种类型数据不同,出于兼容的考虑定义如此。
bind()的第三个参数是指第二个参数的大小14个字节+2是16个字节,而sockadd_in我算了下,也是16个字节。
bind的意图很明显了"Use the bind function to establish the local association of the socket by assigning a local name to an unnamed socket." 其中的这个name就是指sockadd_in(其中有addr_family,port,addrsss)
- Socket编程小结
- Socket编程小结2
- socket编程小结
- Socket编程小结
- socket编程小结
- java编程(Socket) 小结
- Socket编程小结
- socket编程几个函数小结
- socket编程几个函数小结
- Socket网络编程--epoll小结
- JavaSwing的Socket编程小结
- Socket网络编程--epoll小结
- Socket网络编程--epoll小结
- socket网络编程--epoll小结
- 网络socket编程几个函数小结
- 非阻塞socket编程问题小结
- 非阻塞socket编程问题小结
- DELPHI SOCKET 通信编程要点小结
- ArrayList,Vector, LinkedList的存储性能和特性
- 月度工作总结
- forward 和redirect的区别
- asp创建文件夹,创建路径
- 求数组所有元素之和
- Socket编程小结
- DBA组件---ADO数据库编程利器
- 静态库VS动态库
- 什么是JSP
- ASP入门基础教程-对文件夹操作
- eVC实现INI格式文件操作(Unicode)
- 12-3
- 《孙鑫VC视频》- TCP网络编程
- UVa Problem Solution: 10247 - Complete Tree Labeling