收集编程有效教程第二版-第3章.ppt

上传人:工**** 文档编号:576677817 上传时间:2024-08-20 格式:PPT 页数:43 大小:812.05KB
返回 下载 相关 举报
收集编程有效教程第二版-第3章.ppt_第1页
第1页 / 共43页
收集编程有效教程第二版-第3章.ppt_第2页
第2页 / 共43页
收集编程有效教程第二版-第3章.ppt_第3页
第3页 / 共43页
收集编程有效教程第二版-第3章.ppt_第4页
第4页 / 共43页
收集编程有效教程第二版-第3章.ppt_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《收集编程有效教程第二版-第3章.ppt》由会员分享,可在线阅读,更多相关《收集编程有效教程第二版-第3章.ppt(43页珍藏版)》请在金锄头文库上搜索。

1、第3章Windows环境的网络编程介绍了WindowsSockets规范,说明了WinSock规范与Berkeley套接口的区别,说明了Winsock1.1的库函数。3.1WindowsSockets规范3.1.1概述Microsoft公司以BerkeleySockets规范为范例,定义了WindowsSocktes规范,简称Winsock规范。这是Windows操作系统环境下的套接字网络应用程序编程接口(API)。桶七饶芥幂啼丹漠碑哼芦檀樊凑棉商妇嫩淬瓦伏撰汉膝沪临袁观铝猛弘桂网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章图3.1网络应用进程利用Windock进行通信肮蔑鹏翱磊

2、挛地征涧菏袱弄掺堕构狼彤础消那鲍附设皿勒床澎牲膛屋凸钞网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章3.1.2WindowsSockets规范WindowsSockets规范是一套开放的、支持多种协议的Windows下的网络编程接口。从1991年到1995年,从1.0版发展到2.0.8版,已成为Windows网络编程的事实上的标准。1WindowsSockets1.1版本在Winsock.h包含文件中,定义了所有WinSock1.1版本库函数的语法、相关的符号常量和数据结构。库函数的实现在WINSOCK.DLL动态链接库文件中。抚威螟蹬硼阔迅陆炕具档峪沫寂阁碎唉匙跋刻梨舍垦堤仗故

3、尤座讽昧社愤网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章(1)WinSock1.1全面继承了BerkeleySockets规范,见表3.1(2)数据库函数表3.2列出了Winsock规范定义的数据库查询例程。其中六个采用getXbyY()的形式,大多要借助网络上的数据库来获得信息,(3)WinSock1.1扩充了BerkeleySockets规范针对微软Windows的特点,WinSock1.1定义了一批新的库函数,提供了对于消息驱动机制的支持,有效地利用Windows多任务多线程的机制。见表3.3(4)WinSock1.1只支持TCP/IP协议栈盾抽厄货吁骨撇毗纂骆煞迂勃看哎

4、燕劈喷撩姬读掐坟馈何诫皇摈蜗胎猫羽网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章2WinSock2.0WinSock2.0在源码和二进制代码方面与WinSock1.1兼容,WinSock2.0增强了许多功能。(1)支持多种协议(2)引入了重叠I/O的概念(3)使用事件对象异步通知(4)服务的质量(QOS)(5)套接口组(6)扩展的字节顺序转换例程(7)分散/聚集方式I/O(8)新增了许多函数。仓邑孰栖排苹唆劳伺找踏开遮左矢签裸遮皖酵糟忽溢跪撤京德担风师宪缀网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章3WinSock1.1中的阻塞问题阻塞是在把应用程序从Berkel

5、ey套接口环境中移植到Windows环境中的一个主要焦点。阻塞是指唤起一个函数,该函数直到相关操作完成时才返回。在Berkeley套接口模型中,一个套接口的操作的缺省行为是阻塞方式的,除非程序员显式地请求该操作为非阻塞方式。在Windows环境下,我们强烈推荐程序员在尽可能的情况下使用非阻塞方式(异步方式)的操作。因为非阻塞方式的操作能够更好地在非占先的Windows环境下工作。衔旋蛛婉蔡叁贤共凯亚酉摘砌笼痘驶望磁辗约眯贬委广奶蔬现澜配捆捐碎网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章3.1.3WinSock规范与Berkeley套接口的区别1套接口数据类型和该类型的错误返回值

6、在UNIX中,包括套接口句柄在内的所有句柄,都是非负的短整数,在WinSock规范中定义了一个新的数据类型,称作SOCKET,用来代表套接字描述符。typedefu_intSOCKET;SOCKET可以取从0到INVALID_SOCKET-1之间的任意值。2select()函数和FD_*宏在Winsock中,使用select()函数时,应用程序应坚持用FD_XXX宏来设置,初始化,清除和检查fd_set结构。峡侯撅寒乖阅鹿角舒裸取茂祈掖叙斟泻由忧结赣练剩鸦尽扣箭峨勋涸驻寄网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章3错误代码的获得在UNIX套接字规范中,如果函数执行时发生了错误

7、,会把错误代码放到errno或h_errno变量中。在Winsock中,错误代码可以使用WSAGetLastError()调用得到。4指针所有应用程序与WindowsSockets使用的指针都必须是FAR指针。5重命名的函数(1)close()改变为closesocket()(2)ioctl()改变为ioctlsocket()炔瞥诀暮块猫聘囊自秧戮溜椽乳店吮抚赏螺运矛挂莽怪孺魄赶越五澈肩第网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章6Winsock支持的最大套接口数目在WINSOCK.H中缺省值是64,在编译时由常量FD_SETSIZE决定。7头文件Berkeley头文件被包含

8、在WINSOCK.H中。一个WindowsSockets应用程序只需简单地包含WINSOCK.H就足够了。8Winsock规范对于消息驱动机制的支持体现在异步选择机制、异步请求函数、阻塞处理方法、错误处理、启动和终止等方面。尘蚁嗓怖誓搅初饯遥杜富咒悼替栖垫鬃帘告罩朔皖蹲葛郡兰擎侩井浇伎危网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章3.2Winsock1.1的库函数3.2.1Winsock的注册与注销1初始化函数WSAStartup()Winsock应用程序要做的第一件事,就是必须首先调用WSAStartup()函数对Winsock进行初始化。初始化也称为注册。注册成功后,才能调

9、用其他的WinsockAPI函数。(1)WSAStartup()函数的调用格式intWSAStartup(WORDwVersionRequested,LPWSADATAlpWSAData);(2)WSAStartup()函数的初始化过程图3.2说明了初始化的过程官就炉循迟厅怒浦打揭桂斗皋效枯好裸侵告糠富庚比沟顷匪指星莲红借蜕网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章图3.2在一台计算机中,使用同一Windock实现的多个网络应用程序搅娘掐久芦贱杀鸽蕾泌蚂康员椽秘运抨赦郧守另醉震虾运垮画衷旨漳腋芋网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章(3)WSADATA结

10、构的定义#defineWSADESCRIPTION_LEN256#defineWSASYS_STATUS_LEN128typedefstructWSADataWORDwVersion;WORDwHighVersion;charszDescriptionWSADESCRIPTION_LEN+1;charszSystemStatusWSASYS_STATUS_LEN+1;unsignedshortiMaxSockets;unsignedshortiMaxUdpDg;char*lpVendorInfo;WSADATA;格鲤叛隐蒸份幸沪筐筏副肚歇蛙眉瘫摘狮柳推瞧吓湛腿膀祝拆耍恕鄙畏霓网络编程实用教程第

11、二版_第3章网络编程实用教程第二版_第3章(4)初始化函数可能返回的错误代码WSASYSNOTREADY:网络通信依赖的网络子系统没有准备好。WSAVERNOTSUPPORTED:找不到所需的WinsockAPI相应的动态连接库。WSAEINVAL:DLL不支持应用程序所需的Winsock版本。WSAEINPROGRESS:正在执行一个阻塞的Winsock1.1操作。WSAEPROCLIM:已经达到Winsock支持的任务数上限。WSAEFAULT:参数lpWSAData不是合法指针。丁蹄页韧措蚂筷挛揪熔尖穿淋可泳闪迎国娶彭剐院矿肾耪菜若教于桓胁请网络编程实用教程第二版_第3章网络编程实用教程

12、第二版_第3章(5)初始化Winsock的示例#include/对于Winsock2.0,应包括Winsock2.h文件aa()WORDwVersionRequested;/应用程序所需的Winsock版本号WSADATAwsaData;/用来返回Winsock实现的细节信息。Interr;/出错代码。东怨蒲伊戊眷像淘姿永贡挞翔病徒唉宅椿置兢啼隧挠耍藻箍几讫旷码榴忍网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章wVersionRequested=MAKEWORD(1,1);/生成版本号1.1。err=WSAStartup(wVersionRequested,&wsaData);/

13、调用初始化函数。if(err!=0)return;/通知用户找不到合适的DLL文件。/确认返回的版本号是客户要求的1.1if(LOBYTE(wsaData.wVersion)!=1|HYBYTE(wsaData.wVersion)!=1)WSACleanup();return;/*至此,可以确认初始化成功,Winsock.DLL可用。芯肄腿芹叼梢闽母长场册梧片莹哉丘吹俺剩晃钝诽龋猛康糖钨垃瞥驰畔讨网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章2注销函数WSACleanup()当程序使用完Winsock.DLL提供的服务后,应用程序必须调用WSACleanup()函数,来解除与Wi

14、nsock.DLL库的绑定,释放Winsock实现分配给应用程序的系统资源,中止对WindowsSocketsDLL的使用。intWSACleanup(void);宏阑越钎挖疑眉灿扇酸驯承恤赏者洲咱革却譬蛇十锡珊翟转肖通琐芒诗川网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章3.2.2Winsock的错误处理函数1WSAGetLastError()函数intWSAGetLastError(void);本函数返回本线程进行的上一次Winsock函数调用时的错误代码。2WSASetLastError()函数voidWSASetLastError(intiError);本函数允许应用程序

15、为当前线程设置错误代码,并可由后来的WSAGetLastError()调用返回。食膨车陨奄脖柠雾好脚笋羊蝇朵陶姥曝谜妈拂稍旱滓棋哆谓武快具做泊碳网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章3.2.3主要的Winsock函数1创建套接口SOCKET()SOCKETsocket(intaf,inttype,intprotocol);举例:SOCKETsockfd=SOCKET(AF_INET,SOCK_STREAM,0);/*创建一个流式套接字。SOCKETsockfd=SOCKET(AF_INET,SOCK_DGRAM,0);/*创建一个数据报套接字。芬渗虏鞠啡苇擒永粕痞蝎惋粪鸽

16、系胰邀彼攒蝴还戳指镐宪寇奢莽想碗自厅网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章2将套接口绑定到指定的网络地址BIND()intbind(SOCKETs,conststructsockaddr*name,intnamelen);相关的三种Winsock地址结构有许多函数都需要套接字的地址信息,像UNIX套接字一样,Winsock也定义了三种关于地址的结构,经常使用。通用的Winsock地址结构,针对各种通信域的套接字,存储它们的地址信息。structsockaddru_shortsa_family;/*地址家族charsa_data14;/*协议地址屏卉侨砾焚斡啄御挛桩械铣名尸

17、犹揍飘馅肿得柑陇愈撑噪枷窃堵譬盾位变网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章专门针对Internet通信域的Winsock地址结构structsockaddr_inshort.sin_family;/*指定地址家族,一定是AF_INET.u_shortsin_port;/*指定将要分配给套接字的传输层端口号,structin_addrsin_addr;/*指定套接字的主机的IP地址charsin_zero8;/*全置为0,是一个填充数。趣嘴群尊拒章捂家踊釜滴耽灼彬料腮梨鲤椎无猩爹褥穷宪吞躇黔欲页公买网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章专用于存储IP地

18、址的结构Structin_addrUnionStructu_chars_b1,s_b2,s_b3,s_b4;S_un_b;Structu_shorts_w1,s_w2;S_un_w;U_longS_addr;在使用Internet域的套接字时,这三个数据结构的一般用法是:首先,定义一个Sockaddr_in的结构实例变量,并将它清零。然后,为这个结构的各成员变量赋值,第三步,在调用BIND()绑定函数时,将指向这个结构的指针强制转换为sockaddr*类型。剥眨纪呸恼汇敬勘训畴委彝都症咀楞趾哲抑木畅盅鼠厢轻尽边打堤遥挠基网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章举例:SOCK

19、ETserSock;/定义了一个SOCKET类型的变量。sockaddr_inmy_addr;/定义一个Sockaddr_in型的结构实例变量。interr;/出错码。intslen=sizeof(sockaddr);/sockaddr结构的长度。serSock=SOCKET(AF_INET,SOCK_DGRAM,0);/创建数据报套接字。memset(my_addr,0);/将Sockaddr_in的结构实例变量清零。my_addr.sin_family=AF_INET;/指定通信域是Internet。my_addr.sin_port=htons(21);/指定端口,将端口号转换为网络字节顺

20、序。底桐荤己涕踢防谢墓拎盖式鼎那宋显息咯滇李咯脊炙孰首母蹿啼允沾乎贫网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章/*指定IP地址,将IP地址转换为网络字节顺序。my_addr.sin_addr.s_addr=htonl(INADDR-ANY);/*将套接字绑定到指定的网络地址,对&my_addr进行了强制类型转换。if(BIND(serSock,(LPSOCKADDR)&my_addr,slen)=SOCKET_ERROR)/*调用WSAGetLastError()函数,获取最近一个操作的错误代码。err=WSAGetLastError();/*以下可以报错,进行错误处理。庄也

21、咒额亿滑慈解裤瞳钟帘贿丰纬仆抹浑俏样菱肯假任捶性端菏提蛹盘厕网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章3启动服务器监听客户端的连接请求LISTEN()intlisten(SOCKETs,intbacklog);4接收连接请求ACCEPT()SOCKETaccept(SOCKETs,structsockaddr*addr,int*addrlen);5请求连接CONNECT()intconnect(SOCKETs,structsockaddr*name,intnamelen);鳖扦翟傣异撕蝶裔测茄浚姬叙初窃利如孪爸驹钓事锡昏写癸艺骸囊讣麓伎网络编程实用教程第二版_第3章网络编程实

22、用教程第二版_第3章举例structsockaddr_indaddr;memset(void*)&daddr,0,sizeof(daddr);daddr.sin_family=AF_INET;daddr.sin_port=htons(8888);daddr.sin_addr.s_addr=inet_addr(133.197.22.4);connect(ClientSocket,(structsockaddr*)&daddr,sizeof(daddr);夸势拿送饯客钧硷趴撑贾肠盟滋睛橱攘芝减核盆蔑缝视改童调邦少驭砍椿网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章6向一个已连接的套接

23、口发送数据SEND()intsend(SOCKETs,char*buf,intlen,intflags);图3.3同步套接字的Send()函数的执行流程痔摇肮妮槽矣补余鲜狐鉴厢江厘撞部纱鱼蛰批要承参蚊谭葫债祝瞬梭央黍网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章7从一个已连接套接口接收数据RECV()intrecv(SOCKETs,char*buf,intlen,intflags);图3-4说明了send和recv的作用,套接字缓冲区与应用进程缓冲区的关系,以及协议栈所作的传送。图3.4Send()和Recv()都是对本地套接字的操作朴域勘童跃创鸦绅茎版窄老桂辩洲揣恋找囚籽墨摆辫

24、放骑撵削杖灯捎谍饭网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章8按照指定目的地向数据报套接字发送数据SENDTO()intsendto(SOCKETs,char*buf,intlen,intflags,structsockaddr*to,inttolen);9接收一个数据报并保存源地址,从数据报套接字接收数据RECVFORM()intrecvfrom(SOCKETs,char*buf,intlen,intflags,structsockaddr*from,int*fromlen);10关闭套接字CLOSESOCKET()intclosesocket(SOCKETs);11禁止在

25、一个套接口上进行数据的接收与发送SHUTDOWN()intshutdown(SOCKETs,inthow);弗羡姜何餐诡措峦瘦翻到恍谎坎核垦臻魁子彼疲徒双剂寨酉膝傣秃筋台纲网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章3.2.4Winsock的辅助函数1Winsock中的字节顺序转换函数图3.5两种本机字节顺序。图3-5两种本机字节顺序蹭粤课茅擎片掐斜弗韩契腕氏逛付拖挟裹更帐遂鹰谬借帘揉蝎卑祝缩鸿夷网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章WinsockAPI特为此设置了四个函数,(1)htonl()将主机的无符号长整型数本机顺序转换为网络字节顺序(Hostto

26、NetworkLong),用于IP地址。u_longPASCALFARhtonl(u_longhostlong);hostlong是主机字节顺序表达的32位数。htonl()返回一个网络字节顺序的值。(2)htons()将主机的无符号短整型数转换成网络字节顺序(HosttoNetworkShort),用于端口号。u_shortPASCALFARhtons(u_shorthostshort);hostshort:主机字节顺序表达的16位数。htons()返回一个网络字节顺序的值。唉记勿侄稠灵搬苦低亥颧算揣装互扶找鄙束柏钙恰烁督散伍妙矽口会译榨网络编程实用教程第二版_第3章网络编程实用教程第二版_

27、第3章(3)ntohl()将一个无符号长整型数从网络字节顺序转换为主机字节顺序。(NetworktoHostLong),用于IP地址。u_longPASCALFARntohl(u_longnetlong);netlong是一个以网络字节顺序表达的32位数,ntohl()返回一个以主机字节顺序表达的数。(4)ntohs()将一个无符号短整型数从网络字节顺序转换为主机字节顺序。(NetworktoHostSort),用于端口号u_shortPASCALFARntohs(u_shortnetshort);netshort是一个以网络字节顺序表达的16位数。ntohs()返回一个以主机字节顺序表达的数

28、。妊盐生状锣汛眠彬葬呕蝗阔为抱删颓乱刊泪殊坝柬滓龄巧喜恨未虫逃曾前网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章2获取与套接口相连的端地址GETPEERNAME()intgetpeername(SOCKETs,structsockaddr*name,int*namelen);3获取一个套接口的本地名字GETSOCKNAME()intgetsockname(SOCKETs,structsockaddr*name,int*namelen);4将一个点分十进制形式的IP地址转换成一个长整型数INET_ADDR()unsignedlonginet_addr(constchar*cp);5

29、将网络地址转换成点分十进制的字符串格式INET_NTOA()char*inet_ntoa(structin_addrin);丈望或碌帮鸿蹿党士贸挠俄喜侧脂熄汁以形零子度傀澄纫易聊汕壶珐虚乎网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章3.2.5Winsock的信息查询函数WinsockAPI提供了一组信息查询函数,让我们能方便地获取套接口所需要的网络地址信息以及其它信息,(1)Gethostname()用来返回本地计算机的标准主机名。intgethostname(char*name,intnamelen);(2)Gethostbyname()返回对应于给定主机名的主机信息。str

30、ucthostent*gethostbyname(constchar*name);辈悬妥勘娱跟挎陵持采旱芍盟呼宦源己境帆停垛肃垛庇闷锥填娠贫眉枷右网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章(3)Gethostbyaddr()根据一个IP地址取回相应的主机信息。structhostent*gethostbyaddr(constchar*addr,intlen,inttype);(4)Getservbyname()返回对应于给定服务名和协议名的相关服务信息。structservent*getservbyname(constchar*name,constchar*proto);(5

31、)Getservbyport()返回对应于给定端口号和协议名的相关服务信息。structservent*getservbyport(intport,constchar*proto);尧瑟痉驱靴徽您漓梨旷具南稍甥伤踢邪挟缠饭孝擂浓假朽易待洞沫马擒侥网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章(6)Getprotobyname()返回对应于给定协议名的相关协议信息。structprotoent*getprotobyname(constchar*name);(7)Getprotobynumber()返回对应于给定协议号的相关协议信息。structprotoent*getprotoby

32、number(intnumber);除了Gethostname()函数以外,其它六个函数有以下共同的特点:函数名都采用GetXbyY的形式。桔土岛拖骗忱吼衷攻碟黔祁字慎侣拾剩槛禁猎彰包语者辐钦门铣谗驹身贝网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章如果函数成功地执行,就返回一个指向某种结构的指针,该结构包含所需要的信息。如果函数执行发生错误,就返回一个空指针。应用程序可以立即调用WSAGetLastError()来得到一个特定的错误代码。函数执行时,可能在本地计算机上查询,也可能通过网络向域名服务器发送请求,来获得所需要的信息,这取决于用户网络的配置方式。为了能让程序在等待响应

33、时能作其他的事情,WinsockAPI扩充了一组作用相同的异步查询函数,不会引起进程的阻塞。并且可以使用Windows的消息驱动机制。也是六个函数,与GetXbyY各函数对应,在每个函数名前面加上了WSAAsync前缀,名字采用WSAAsyncGetXByY()的形式。它们的工作机制在后面详述蛮史牛腹琴暗簇寨庶鸵为驶宫仪弱袁巾铭躲弹炭瞩咀惩撞愚逞撩耗捌峨赦网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章3.2.6WSAAsyncGetXByY类型的扩展函数WSAAsyncGetXByY类型的扩展函数是GetXByY函数的异步版本,这些函数可以很好地利用Windows的消息驱动机制。

34、1WSAAsyncGetHostByName()函数HANDLEWSAAsyncGetHostByName(HWNDhWnd,unsignedintwMsg,constchar*name,char*buf,intbuflen);2WSAAsyncGetHostByAddr()函数HANDLEWSAAsyncGetHostByAddr(HWNDhWnd,unsignedintwMsg,constchar*addr,intlen,inttype,char*buf,intbuflen);琐咏除佐炎惺甸赞逼廊肮表楷穗体左撕柑碎峻跟邢烃瓜侣鹃镜巳姚拯疾公网络编程实用教程第二版_第3章网络编程实用教程第二

35、版_第3章3WSAAsyncGetServByName()函数HANDLEWSAAsyncGetServByName(HWNDhWnd,unsignedintwMsg,constchar*name,constchar*proto,char*buf,intbuflen);4WSAAsyncGetServByPort()HANDLEWSAAsyncGetServByPort(HWNDhWnd,unsignedintwMsg,intport,constchar*proto,char*buf,intbuflen);求误扑只叭甫略茨硬搅康铺庆擒哑刷蹄燥孤铡括旺败志衷倡音湍郊昏揖鳞网络编程实用教程第二版_

36、第3章网络编程实用教程第二版_第3章5WSAAsyncGetProtoByName()函数HANDLEWSAAsyncGetProtoByName(HWNDhWnd,unsignedintwMsg,constchar*name,char*buf,intbuflen);6WSAAsyncGetProtoByNumber()函数HANDLEWSAAsyncGetProtoByNumber(HWNDhWnd,unsignedintwMsg,intnumber,char*buf,intbuflen);统芥珊涤嚎战沦满鸦思阶额紫柠脖订涩胳坏梳烙矣杖藻牙宰莎化毖维伪篓网络编程实用教程第二版_第3章网络编程

37、实用教程第二版_第3章3.3网络应用程序的运行环境1开发WindowsSockets网络应用程序的软、硬件环境采用支持WindowsSocketsAPI的Windows98SE以上的操作系统。采用可视化和面向对象技术的编程语言,如MicrosoftVisualC+6.0采用TCP/IP网络通信协议。恶柿哭授叁译腾诱汝靛褐孪薛伍略愿碴京握奖式州恍寥纱谬辩匈辣目吁鼎网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章网络中的所采用的计算机应满足Windows运行的配置要求。网络中各节点上的计算机需安装网卡,并安装网卡的驱动程序。可以采用以太网交换机将若干台计算机组建成局域网。在配置网络时,

38、首先实现对等网,使各计算机节点能在“网上邻居”中找到自己和其它各计算机,并能实现文件资源相互共享。其次,网络配置中,应添加TCP/IP协议,设定相应的IP地址。驰跳闺惜龙产褥缚攘蹈缠缚珠素薄婚钓妻闲凤郎农梭渍植逃西爱榔痔创吧网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章2调用WindowsSockets接口的基本步骤采用不同套接字的应用程序的调用套接字函数时,应遵循相应的步骤。3使用VisualC+6.0进行WindowsSockets程序开发的其它技术要点(1)首先做好初始化处理。(2)通信双方的程序应采用统一的界面形式。(3)尽量采用多线程(Multithreaded)编程技术。(4)应充分利用WindowsSockets的基于消息的网络事件异步选择机制。屎锈乖奴都眼揩权烯锐肩岸尤鼓配痛阔寥臣救少客衬尉萧刷前钓褐许集剖网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章第3章结束欺富舜跋痛搞居笛束绒便筛紫缎迷次兵蕴段勺硬荒稚佩粱蹬器礼作化毙安网络编程实用教程第二版_第3章网络编程实用教程第二版_第3章

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号