欢迎来到天天文库
浏览记录
ID:57047215
大小:47.50 KB
页数:24页
时间:2020-07-28
《控制台编程(阻塞 非阻塞)剖析课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Win32ConsoleApplicationCommunicationProgramming阻塞式套接字网络编程非阻塞式套接字网络编程阻塞式套接字网络编程#include#include#pragmacomment(lib,"ws2_32.lib")阻塞式套接字客户机完整代码服务端程序p2-5.cpp//初始化Winsock服务WSADATAWsaDat;if(WSAStartup(MAKEWORD(2,2),&WsaDat)!=0){std::cout<<"Winsock错误-Wins
2、ock服务初始化失败!r";WSACleanup();system("PAUSE");return0;}typedefstructWSAData{WORDwVersion;WORDwHighVersion;charszDescription[WSADESCRIPTION_LEN+1];charszSystemStatus[WSASYSSTATUS_LEN+1];unsignedshortiMaxSockets;unsignedshortiMaxUdpDg;charFAR*lpVendorInfo;}WSADATA;wVersi
3、on:将使用的Winsock版本号,wHighVersion:载入的Winsock动态库支持的最高版本,注:高字节代表次版本,低字节代表主版本。szDescription与szSystemStatus:由特定版本的Winsock设置,实际上没有太大用处。iMaxSockets:表示最大数量的并发Sockets,其值依赖于可使用的硬件资源。iMaxUdpDg:表示数据报的最大长度;lpVendorInfo:是为Winsock实现而保留的制造商信息,这个在Windows平台上并没有什么用处.//创建套接字SOCKETSocket=soc
4、ket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(Socket==INVALID_SOCKET){std::cout<<"套接字错误-创建套接字失败!r";WSACleanup();system("PAUSE");return0;}//主机名解析structhostent*host;if((host=gethostbyname("localhost"))==NULL){std::cout<<"主机名解析失败!r";WSACleanup();system("PAUSE");return0;}S
5、tructhostent{char*h_name;char*h_aliases;shorth_addrtype;shorth_length;char**h_addr_list;};h_name–地址的正式名称。h_aliases–空字节-地址的预备名称的指针。h_addrtype–地址类型;通常是AF_INET。h_length–地址的比特长度。h_addr_list–零字节-主机网络地址指针。网络字节顺序。h_addr-h_addr_list中的第一地址。//初始化套接字地址结构信息SOCKADDR_INserverInf;ser
6、verInf.sin_family=AF_INET;serverInf.sin_addr.s_addr=INADDR_ANY;serverInf.sin_port=htons(8888);sockaddr_in(在netinet/in.h中定义):structsockaddr_in{shortintsin_family;/*Addressfamily*/unsignedshortintsin_port;/*Portnumber*/structin_addrsin_addr;/*Internetaddress*/unsigne
7、dcharsin_zero[8];/*Samesizeasstructsockaddr*/};structin_addr{unsignedlongs_addr;};typedefstructin_addr{union{struct{unsignedchars_b1,s_b2,s_b3,s_b4;}S_un_b;struct{unsignedshorts_w1,s_w2;}S_un_w;unsignedlongS_addr;}S_un;}IN_ADDR;sin_family:指代协议族,在socket
8、编程中只能是AF_INETsin_port:存储端口号(使用网络字节顺序)sin_addr:存储IP地址,使用in_addr这个数据结构sin_zero:是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而
此文档下载收益归作者所有