试验讲解1套接字的使用实例.ppt
上传人:天马****23 上传时间:2024-09-11 格式:PPT 页数:25 大小:238KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

试验讲解1套接字的使用实例.ppt

试验讲解1套接字的使用实例.ppt

预览

免费试读已结束,剩余 15 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

D.E.Comer,D.L.Stevens,TCP/IP网络互连技术卷III:客户服务器编程和应用Windows套接字版清华大学出版社字节顺序structsockaddr_in{shortsin_family;/*协议簇*/u_shortsin_port;/*端口号*/structin_addrsin_addr;/*网络地址*/charsin_zero[8];/*给另一主机的网络地址和IP地址使用*/};structhostentFAR*gethostbyname(constcharFAR*name;)/*利用主机名或域名获得IP地址(网络字节序)*/structhostent{charFAR*h_name;/*officialnameofhost,如,www.sohu.com,myhost*/charFAR*FAR*h_aliases;/*aliaslist,null-terminated*/shorth_addrtype;/*hostaddresstype*/shorth_length;/*lengthofaddress*/charFAR*FAR*h_addr_list;/*listofaddresses*/#defineh_addrh_addr_list[0]/*address,forbackwardcompat*/};structserventFAR*getservbyname(constcharFAR*name;/*如,HTTP,DayTime;Telnet*/constcharFAR*proro;/*协议(可选),如,udp,tcp*/)structservent{charFAR*s_name;/*officialservicename*/charFAR*FAR*s_aliases;/*aliaslist*/charFAR*s_proto;/*protocoltouse*/shorts_port;/*port#*/};如何把服务名解释为端口号?structprotoentFAR*getprotobyname(constcharFAR*name;/*如,udp,tcp*/)structprotoent{charFAR*p_name;/*officialprotocolname*/charFAR*FAR*p_aliases;/*aliaslist*/shortp_proto;/*protocol#*/};返回对应于给定协议名的包含名字和协议号的protoent结构指针ppe=Getprotobyname(“tcp”)ppe->p_name=“tcp”Ppe->p_proto=6服务器端程序(命令行程序)#defineWSVERSMAKEWORD(2,2)#defineQLEN5/*请求队列长度*/voidmain(intargc,char*argv[]){structsockaddr_infsin;/*thefromaddressofaclient*/char*service="daytime";/*servicenameorportnumber*/SOCKETmsock,ssock;/*master&slavesockets*/intalen;/*from-addresslength*/WSADATAwsadata;switch(argc){case1:break;case2:service=argv[1];break;default:errexit("usage:TCPdaytimed[port]\n");}if(WSAStartup(WSVERS,&wsadata)!=0)errexit("WSAStartupfailed\n");msock=passiveTCP(service,QLEN);while(1){alen=sizeof(structsockaddr);ssock=accept(msock,(structsockaddr*)&fsin,&alen);if(ssock==INVALID_SOCKET)errexit("acceptfailed:errornumber%d\n",GetLastError());TCPdaytimed(ssock);(void)closesocket(ssock);}(void)closesocket(ssock);}SOCKETpassiveTCP(constchar*service,intqlen){returnpassivesoc