2012-2013-1_计算机网络原理-实验项目(JWV201210).docx_第1页
2012-2013-1_计算机网络原理-实验项目(JWV201210).docx_第2页
2012-2013-1_计算机网络原理-实验项目(JWV201210).docx_第3页
2012-2013-1_计算机网络原理-实验项目(JWV201210).docx_第4页
2012-2013-1_计算机网络原理-实验项目(JWV201210).docx_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机网络原理 实验指导书贾 伟2012秋网络101-103实验项目要求序号项目名称完成要求实验报告要求备注1认识网络体系结构必做书写报告并提交验证、2学时2以太网帧结构分析课后必做提交电子文档3IP协议分析课后必做提交电子文档4路由与路由协议必做书写报告并提交综合、4学时5TCP通信分析必做书写报告并提交验证、2学时6DNS域名解析分析课后必做提交电子文档7HTTP通信分析必做书写报告并提交验证、2学时8Socket API编程课后必做提交电子文档9CGI编程课后必做提交电子文档10网络命令工具使用选做不做要求11组建简单以太网选做不做要求12Web服务配置选做不做要求实验项目表序号项目名称主要内容要点适用专业1认识网络体系结构了解网络设备组件与网络功能层次的对应关系;网络物理结构分布与网络逻辑拓扑的对应关系协议的报文分组封装和分层在包结构中的表示网络、其它2以太网帧结构分析捕获以太网帧,以进行结构分析网络3IP协议分析捕获IP分组报文,以进行报文结构分析网络4路由与路由协议查看路由器的路由表,观察数据包在路由器中的转发过程。分析某种路由协议(如RIP)的路由交换过程。网络5TCP通信分析捕获TCP通信过程的报文,分析TCP包结构和TCP通信原理。网络6DNS域名解析分析使用dig软件,验证DNS的域名解析过程。网络7HTTP通信分析使用Telnet,手工进行HTTP通信验证,分析HTTP报文结构。网络8Socket API编程通过调用Socket API,编程实现基于UDP或TCP的网络通信。网络、其它9CGI编程基于C语言实现Web的CGI编程,表单交互,理解Get和post方法的差异。网络10网络命令工具使用熟练使用厂家的网络工具,检测网络状况。网络、其它11组建简单以太网将计算机、交换机等构建为局域网,包括网线制作、IP配置等,实现计算机间的连通。其它12Web服务配置安装配置好Web服务,制作简单网页,发布到Web服务器中,实现对其访问。其它有关软件介绍说明软件名有关网址用途Wireshark/网络数据包捕获和分析Ping系统自带telnet系统自带traceroute/tracert系统自带Cisco Packet TracerCisco提供的网络仿真工具wget/curl获取Web URL资源的命令行工具Internet ExplorerWeb浏览器digDNS测试检查工具IISWeb服务器软件ApacheWeb服务器软件vIsio绘图工具VC+C/C+编程软件实验1 认识网络体系结构实验类型、性质与学时验证、2学时。实验目的要求与任务了解网络体系结构的分层模型及其各层的内容和功能,查看各层对应的实体(物理硬件和/或软件。了解计算机网络的逻辑拓扑和物理拓扑;参观实验室的网络布局,绘制其逻辑拓扑或给出实验室网络的逻辑拓扑,对应查找/查看物理网络结构组件。捕获一个包好所有通信协议层的数据包,分析该数据包的层次结构;理解协议的报文分组的封装和分层在包结构中的体现。实验环境与器具一个完整的网络环境,尽量包好尽可能多的网络设备。使用Cisco Packet Tracer构建仿真的网络或网络拓扑绘制软件(如visio)。数据包捕获和分析软件(Wireshark)。实验原理或实验方案在老师的指导下查看网络各层对应的实体(如物理层下的传输介质双绞线;物理层的网卡和驱动程序;网络层、运输层的TCP/IP配置;应用层的各个应用程序)。老师讲解参观机房网络,给出拓扑图,学生使用绘图软件进行拓扑图绘制或使用Cisco Packet Tracer构建仿真的网络。使用Wireshark软件捕获网络通信流量,分析数据包结构(具体参见“01Lab_protocol-layers.docx”文档)。实验方法与步骤老师说明,学生查看有关网络实体;老师讲解网络拓扑,学生参观,绘制网络拓扑图。老师指导学生捕获数据包,分析数据包,记录下捕获的数据包的有关信息。进一步思考提高如何查看网络体系结构中各层实体发送出或接收到的数据包(流);网络拓扑的结构有那些,当前局域网的基本拓扑是什么,校园企业网有是什么拓扑。实验数据处理及其结论分析给出网络体系结构中各层实体的名称和主要功能;绘制出的拓扑图;记录的有关数据包信息。实验2 以太网帧分析实验类型、性质与学时验证、必做、2学时。实验目的要求与任务理解以太网帧结构细节。实验环境与器具一个完整的连接到Internet的网络环境;数据包捕获和分析软件(Wireshark);手动控制获取Web URL资源的命令行工具wget/curl;路由跟踪命令:traceroute/tracert。实验原理或实验方案使用Wireshark软件捕获网络通信流量,分析数据包结构。实验方法与步骤老师指导学生捕获数据包,分析数据包,记录下捕获的数据包的有关信息。具体参见“02Lab_Ethernet.docx”文档。实验数据处理及其结论分析记录的有关数据包信息。实验3 IP协议分析实验类型、性质与学时验证、2学时。实验目的要求与任务了解IP(互联网协议)的细节。实验环境与器具一个完整的连接到Internet的网络环境;数据包捕获和分析软件(Wireshark);手动控制获取Web URL资源的命令行工具wget/curl;路由跟踪命令:traceroute/tracert。实验原理或实验方案使用Wireshark软件捕获网络通信流量,分析数据包结构。实验方法与步骤老师指导学生捕获数据包,分析数据包,记录下捕获的数据包的有关信息。具体参见“04Lab_IPv4.docx”文档。实验数据处理及其结论分析记录的有关数据包信息。实验4 路由与路由协议实验类型、性质与学时验证、2学时。实验目的要求与任务查看路由器的路由表并做记录,观察路由器如何依据路由表来进行IP报文的转发;分析某种路由协议(如RIP)的路由交换过程,理解其构建网络路由表的过程。实验环境与器具网络仿真工具Cisco Packet Tracer;实验原理或实验方案由于要观察多个路由器之间的路由交换信息,构建具体的物理网络进行实验,一方面较复杂,另一方面,观察通信过程也不方便,故本实验使用Cisco Packet Tracer仿真软件来进行,可以很好的完成本次实验。概念界定:路由转发指路由器依据路由表(转发表),将从一个接口收到的报文从另外的接口发送出去。路由交换指路由器之间相互发送消息,构建路由表的过程。通过使用Cisco Packet Tracer构建仿真网络,将其切换到仿真模式,观察网络通信的包转发/交换过程和包中的数据内容。通过ping命令发送消息数据包,观察数据包在路由器内的转发(通过那个接口发送出去),通过查看路由器中的路由表,说明转发的依据;将仿真网络配置为动态路由协议(如RIP),依据使用的动态路由协议,设置捕获的数据包类型(如RIP)。清空路由表,观察各个捕获的路由交换报文及内容以及根据路由表的变化,说明路由交换的过程。实验方法与步骤1)使用Cisco Packet Tracer构建网络构建如下的网络拓扑图(文件CNLab_Route.pkt)IP配置表设备/接口名IP掩码网关备注2)配置路由表(采用静态路由)路由器目的网络/下一条备注R1R2R33)观察路由转发过程注:查看路由表信息命令:route1#show ip routeIP报文(发送IP/接收IP) 路由器的接收端口 路由器的送出端口说明4)配置路由协议清空路由器的静态路由。配置各个路由器的Rip路由。5)观察路由交换过程发送/接收的路由报文路由交换报文内容路由表的影响备注进一步思考提高在操作系统中使用Route命令,观察其路由表的输出“route print”,说明本机路由表的各个路由条目的含义实验5 TCP通信分析实验类型、性质与学时验证、2学时。实验目的要求与任务理解TCP协议通信过程实验环境与器具一个完整的连接到Internet的网络环境;数据包捕获和分析软件(Wireshark);手动控制获取Web URL资源的命令行工具wget/curl;任意的Web浏览器,如Internet Explorer。实验原理或实验方案使用Wireshark软件捕获网络通信流量,分析数据包结构。实验方法与步骤老师指导学生捕获数据包,分析数据包,记录下捕获的数据包的有关信息。具体参见“09Lab_TCP.docx”文档。实验数据处理及其结论分析记录的有关数据包信息。实验6 DNS域名解析分析实验类型、性质与学时验证、2学时。实验目的要求与任务了解DNS域名解析的详细过程。实验环境与器具一个完整的连接到Internet的网络环境;数据包捕获和分析软件(Wireshark);任意的Web浏览器,如Internet Explorer;DNS测试检查工具dig。实验原理或实验方案使用Wireshark软件捕获网络通信流量,分析数据包结构。实验方法与步骤老师指导学生捕获数据包,分析数据包,记录下捕获的数据包的有关信息。具体参见“10Lab_DNS.docx”文档。实验数据处理及其结论分析记录的有关数据包信息。附录实验6:Dig的使用教程常用的DNS的命令行诊断工具是DIG和NSLOOKUP,DIG比NSLOOKUP功能强大。DIG(Domain Information Groper)原本是Linux平台上BIND服务器诊断的工具,现在已经有了windows的版本。下面使用dig工具在windows环境下来做一些DNS的诊断测试。1、安装DIG程序运行安装程序中的BINDInstall.exe,如下图:运行完成后,会弹出一个对话框,告诉我们安装已完成。如下图:程序默认将关键文件安装到C:WINDOWSsystem32dns下的BIN文件夹下,如下图:红框的文件就是DIG程序。至此,程序安装完成。2、设置DIG运行环境待安装完成后,我们需要将上述安装目录添加到环境变量中,以方便在命令行中直接运行dig命令,而无需使用绝对路径。具体步骤如下:打开系统属性,并找到高级选项卡。如下图:我们需要把DIG的路径添加到系统变量中,如下图:添加完成后,在命令行里测试一下。如下图:出现上图提示就表明DIG程序安装成功,下面对输出内容做简要介绍,如下图:当不添加任何参数,直接使用dig命令时,默认会解析根服务器,并附加解析对应的A记录。如果想解析一个域名,则之需要在dig后面添加域名地址即可。以为例,如下图:上图是利用dig命令查询的A记录,但这样的结果过于简单,并没有体现整个解析过程,此时我们可以借助+trace这个参数,来获得过多的信息。如下图:上图是利用dig命令解析的A记录的整个过程,我们可以清晰的看到首先是查找根DNS服务器,然后其中的K.根服务器告诉DNS负责.com域名的13台顶级域名服务器,接着由其中的顶级域名服务器告诉DNS负责126.com的2台NS服务器分别是和,最后DNS继续查询负责解析www这台主机的NS服务器,结尾一行表明是由NS3这台NS服务器负责解析这个地址的A记录,只是这个A记录做了别名记录,并未直接显示出来而已。但我们可以继续利用dig命令查这个CNAME记录所对应的A记录。如下图:上两幅图掩饰了地址完整的解析过程。我们可以把这个过程以图表的形式体现出来,也就是整个解析路径,如下图:从这张图大家应该大致了解整个解析的过程和步骤。这2个命令仅仅是DIG工具极小的一部分,下面我们将继续介绍我们可以利用DIG命令很轻松的查询某一域名的A、MX等记录。如下图:以163.com为例,查询对应的A记录:同样的,如果想查询对应的MX记录,之需要将a改为mx即可。如下图:最后的A记录是附加的信息,为了简化输出结果,我们可以将这部分内容过滤掉。之需要配合适当参数即可。如下图:同理,我们可以查询PTR记录、SOA记录等等,这里不再演示。这节仅仅是抛砖引玉,还有很多精彩的DIG应用未被列出,大家可以使用dig -help 命令查询DIG更多的参数,由于本系列并非以DIG为主,所以这里就不再熬述其他内容,请见谅。实验7 HTTP通信分析实验类型、性质与学时验证、必做、2学时。实验目的要求与任务分析验证HTTP协议的通信过程。实验环境与器具一个完整的连接到Internet的网络环境;数据包捕获和分析软件(Wireshark);Telnet工具;任意的Web浏览器,如Internet Explorer。实验原理或实验方案教材关于万维网中浏览器与Web服务器的通信过程的HTTP协议内容。实验方法与步骤具体参见“11Lab_HTTP.docx”文档。实验数据处理及其结论分析在每个验证过程中,至少对五项服务器应答的信息进行分析。并提供分析的依据。进一步思考提高通过学习Socket API编程,通过程序来验证HTTP协议,实现Web URL的获取。编写一个程序,与Web服务器建立TCP连接,然后发送HTTP请求报文,获取Web服务的响应报文。#include #include #pragma comment(lib,wsock32)void main()WSADATA wsaData;WSAStartup(0x0101,&wsaData);/装载动态连接库WinSock DLLstruct sockaddr_in SA;char SName256,SIP16,FilePath81=/;int SPort=80;struct hostent *h;int r=0;char ReqMSG256;/HTTP请求的报文char recvBuf1000000;/和服务器端进行通信(send/recv)char input80=0;doSOCKET WebSocket=socket(AF_INET,SOCK_STREAM,0);/创建套接字(socket)puts(Web Server Domain Name or IP:); gets(SName);puts(Web Server Port(80):); scanf(%d,&SPort);getchar();puts(File Name and Path(/):); gets(FilePath);/h = gethostbyname(SName);/获得对应于给定主机名(例)的主机信息(IP地址.)strcpy(SIP,inet_ntoa(*(struct in_addr *)h-h_addr);/得到IP地址SA.sin_addr.s_addr =inet_addr(SIP);/服务器IP地址SA.sin_family=AF_INET; /服务器地址类型SA.sin_port = htons(SPort); /服务器端口。r = connect(WebSocket, (struct sockaddr far *)&SA, sizeof(SA);/向服务器发出连接请求(connect)if(r!=0)puts(connect error!);closesocket(WebSocket);break;/memset(ReqMSG,0,sizeof(ReqMSG);strcat(ReqMSG,GET );strcat(ReqMSG,FilePath);strcat(ReqMSG, HTTP/1.1xdxa);strcat(ReqMSG,Accept: */*);/首部行strcat(ReqMSG,xdxa); /回车换行strcat(ReqMSG,Host: );/首部行strcat(ReqMSG,SName);/首部行strcat(ReqMSG,xdxa);/回车换行strcat(ReqMSG,Connection: Close); /首部行strcat(ReqMSG,xdxa);/回车换行strcat(ReqMSG,xdxa);/回车换行printf(Request message:n%snn,ReqMSG);r=send(WebSocket,ReqMSG,strlen(ReqMSG),0);if(r = SOCKET_ERROR)puts(send error!);closesocket(WebSocket);break;/memset(recvBuf,0,sizeof(recvBuf);r=recv(WebSocket,recvBuf,sizeof(recvBuf),0);/读接收缓冲区recvBufr=0; printf(Server response:n%snn,recvBuf);/closesocket(WebSocket);/关闭套接字puts(Continue? YES or NO(NO):); gets(input);while(!strcmp(input,YES);WSACleanup();/必须调用这个函数清除参数附录:通过telnet手动获取HTTP URL过程使用Telnet与Web服务的80端口连接,然后输入HTTP请求报文发送Web服务,查看Web服务的响应报文,并与通过浏览器获得对应的URL资源进行比较。telnet 80HEAD /index.html HTTP/1.1host: (返回数据略)GET /index.html HTTP/1.1host: (返回数据略)telnet 80HEAD /default.htm HTTP/1.1host: (返回数据略)GET /default.htm HTTP/1.1host: (返回数据略)实验8 Socket API编程实验类型、性质与学时验证、必做、2学时。实验目的要求与任务了解和掌握基于UDP无面向连接的应用程序的运行机制和编程方法;了解和掌握基于TCP面向连接的应用程序的运行机制和编程方法;实验环境与器具Windows OS,TCP/IP协议 ,Visual C+ 6.0。实验原理或实验方案参考计算机网络主要是数字信息的传送,开发网络程序,也就是信息的传送与接收。这犹如单机程序的输入输出是标准的输入输出或文件输入输出改成了向网络上(远地的计算机)进行输入输出。所以网络程序设计不难,知道如何向网络上的计算机输入输出信息就行了。程序设计的关键仍然是得到的数据如何设计出有效的算法进行处理。网络编程包括三个层次模型:1)核心协议开发计算机通信系统中的核心协议开发,这些在操作系统和路由器中实现,是计算机网络的核心基础。一般人很少涉及。2)基于Socket API的C/S编程基于通信服务,开发新的应用服务应用层程序开发(C/S系统)在应用层下面,是传输层。TCP/IP模型中,传输层提供了可靠的面向连接的服务TCP和不可靠的用户数据报服务UDP。如何使用这两种服务,为我们提供通信,TCP/IP模型没有相应的标准。各实现的平台提供了自己独特的应用编程接口API:(1)加利福尼亚大学伯克利分校为Berkeley UNIX 操作系统定义了socket interface;(2)微软的Windows操作系统采用并扩展了socket接口,形成了Windows socket;(3)AT&T为UNIX系统V定义了TLI(Transport Layer Interface)。3)基于Web的B/S编程基于某种应用模型,开发增值服务如基于WWW服务的B/S系统;使用CGI、WinCGI、Perl、PHP、ASP.Net、J2EE 进行Web编程2 WinSock模型介绍Windows平台Socket程序开发模型如图所示。实验方法与步骤1 基于UDP的数据包通信1.1 基于UDP通信的流程图1.2简单的UDP通信示例简单的UDP通信示例UDP接受端(服务器)UDP发送端(客户机)/ UDP (TCP/IP) for the console application./VC6.0 add WSOCK32.LIB in /Project-Settings.-Link#include #include #include /by user#include /by user#pragma comment(lib,wsock32)WORD RPort = 7777; /远程端口RemotePortchar RIP16=; /远程IP地址RemoteIPAddrWORD LPort = 6666; /本地端口LocalPortchar LIP16=; /本地IP地址LocalIPAddrSOCKET S; /套接口SOCKETstruct sockaddr_in rAddr; /远程参数,remoteAddrstruct sockaddr_in lAddr; /本地参数,localAddrWSADATA WD; /WinSock DLL信息int r; /result; /-void ShowInfo(char *info) puts(info); exit(1); /-void SetSockAddr(struct sockaddr_in *A,WORD Port,char *IP)A-sin_family = AF_INET; /TCP/IP协议A-sin_port = htons(Port); /端口。A-sin_addr.s_addr =inet_addr(IP); /IP网址。/-void main()WORD v; /wVersionRequested;/- - - Startup Win Socket - - - - - - - -v=0x0101; /0x0101 for v1.1, 0x0002 forv 2.0r = WSAStartup(v, (LPWSADATA)&WD);if(r != 0) ShowInfo(Start_Error);/- - - Create Win Socket - - - - - - - -S = socket(PF_INET, SOCK_DGRAM, 0);if(S = -1) ShowInfo(Socket_Create_Error);int l=sizeof(rAddr);char Msg80;puts(Type exit then Quit Program!);SetSockAddr(&lAddr, LPort, LIP);r = bind(S,(struct sockaddr far *)&lAddr, sizeof(lAddr);if(r = -1) ShowInfo(bind_Error);SetSockAddr(&rAddr, RPort, RIP);do/- - - Recieve Mess - - - - - -puts(Waiting Recieve.);r = recv(S, Msg, 80,0);/ r = recvfrom(SD,Msg,80,0,(struct sockaddr far *)&rAddr, &l);/ 发送套接口的主机地址信息存放在rAddr中if(r = -1) ShowInfo(Recieve_Error);Msgr=0; puts( Msg);puts(Recieve ok!);/- - - Send Mess - - - - - - - -puts(Send:); gets( Msg);if(!strcmp(Msg,exit) break;r = sendto(S,Msg,strlen(Msg), 0,(struct sockaddr far *)&rAddr, l);if(r = -1) ShowInfo(Send_Error);while(1);closesocket(S);WSACleanup();return ;/-/ UDP (TCP/IP) for the console application./VC6.0 add WSOCK32.LIB in /Project-Settings.-Link#include #include #include /by user#include /by user #pragma comment(lib,wsock32)WORD RPort = 6666; /远程端口RemotePortchar RIP16=;/远程IP地址RemoteIPAddrWORD LPort = 7777; /本地端口LocalPortchar LIP16=; /本地IP地址LocalIPAddrSOCKET S; /套接口SOCKETstruct sockaddr_in rAddr; /远程参数,remoteAddrstruct sockaddr_in lAddr; /本地参数,localAddrWSADATA WD; /WinSock DLL信息int r; /result;/-void ShowInfo(char *info) puts(info); exit(1); /-void SetSockAddr(struct sockaddr_in *A,WORD Port,char *IP)A-sin_family = AF_INET; /TCP/IP协议A-sin_port = htons(Port); /端口。A-sin_addr.s_addr =inet_addr(IP); /IP网址。/-void main()WORD v; /wVersionRequested;/- - - Startup Win Socket - - - - - - - -v=0x0101; /0x0101 for v1.1, 0x0002 forv 2.0r = WSAStartup(v, (LPWSADATA)&WD);if(r != 0) ShowInfo(Start_Error);/- - - Create Win Socket - - - - - - - -S = socket(PF_INET, SOCK_DGRAM, 0);if(S = -1) ShowInfo(Socket_Create_Error);int l=sizeof(rAddr);char Msg80;puts(Type exit then Quit Program!);SetSockAddr(&lAddr, LPort, LIP);r = bind(S,(struct sockaddr far *)&lAddr, sizeof(lAddr);if(r = -1) ShowInfo(bind_Error);SetSockAddr(&rAddr, RPort, RIP);do/- - - Send Mess - - - - - - - -puts(Send:); gets( Msg);if(!strcmp(Msg,exit) break;r = sendto(S,Msg,strlen(Msg), 0,(struct sockaddr far *)&rAddr, l);if(r = -1) ShowInfo(Send_Error);/- - Recieve Mess - - - - - - -puts(Send ok! Waiting Recieve.);r = recv(S, Msg, 80,0);/ r = recvfrom(SD,Msg,80,0,(struct sockaddr far *)&rAddr, &l);/ 发送套接口的主机地址信息存放在rAddr中if(r = -1) ShowInfo(Recieve_Error!);Msgr=0; puts( Msg);puts(Recieve ok!);while(1);closesocket(S);WSACleanup();return ;/-2 基于TCP的可靠通信2.1基于TCP通信的流程图2.2简单的TCP通信示例简单的TCP通信示例TCP 接受端(服务器)TCP发送端(客户机)#include /加裁头文件#include /加载标准输入输出头文件#pragma comment(lib,wsock32)void main() WORD wVersionRequested;/版本号 WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 );/1.1版本的套接字 err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) return; /加载套接字库,加裁失败则返回 if ( LOBYTE( wsaData.wVersion ) != 1 | HIBYTE( wsaData.wVersion ) != 1 ) WSACleanup( ); return; /如果不是1.1的则退出 SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);/创建套接字(socket)。 SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);/转换Unsigned short为网络字节序的格式 addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000);bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR); /将套接字绑定到一个本地地址和端口上(bind) listen(sockSrv,5);/将套接字设为监听模式,准备接收客户请求(listen)。 SOCKADDR_IN addrClient;/定义地址族 int len=sizeof(SOCKADDR);/初始化这个参数,这个参数必须被初始化 while(1) SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);/accept的第三个参数一定要有初始值。 /等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)。 /此时程序在此发生阻塞 char sendBuf100; sprintf(sendBuf,Welcome %s., inet_ntoa(addrClient.sin_addr); /用返回的套接字和客户端进行通信(send/recv)。 send(sockConn,sendBuf,strlen(sendBuf)+1,0); char recvBuf100; recv(sockConn,recvBuf,100,0); printf(%sn,recvBuf); closesocket(sockConn);/关闭套接字。等待另一个用户请求 /while(1)#include #include #pragma comment(lib,wsock32)void main() 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; SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);/创建套接字(socket)。 SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=inet_addr(); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000);connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR);/向服务器发出连接请求(connect)。 char recvBuf100;/和服务器端进行通信(send/recv)。 send(sockClient,This is lizin,strlen(This is lizi)+1,0); recv(sockClient,recvBuf,100,0); printf(%sn,recvBuf);send(sockClient,This is lizin,strlen(This is lizi)+1,0); closesocket(sockClient);/关闭套接字。 WSACleanup();/必须调用这个函数清除参数进一步思考提高实现一个多线程的TCP服务器,可以同时面向多个用户通信。1 工程建立1、使用vc6向导建立控制台工程(console application),并选择支持MFC。2、在stdafx.h中加入头文件conio.h和winsock2.h。3、在头文件中加入:#pragma comment(lib, ws2_32.lib)。2 主程序主要是启动服务器线程并等待用户退出的命令。int _tmain(int argc, TCHAR* argv, TCHAR* envp)int nRetCode = 0; cout Press ESCAPE to terminate programrn;AfxBeginThread(ServerThread,0); /启动一条线程while(_getch()!=27); /用户按ESC键则退出return nRetCode;3 线程代码一个简单的tcp服务器,返回客户的ip地址。UINT ServerThread(LPVOID pParam) cout Starting up TCP serverrn;/A SOCKET is simply a typedef for an unsigned int./In Unix, socket handles were just about same as file /handles which were again unsigned ints./Since this cannot be entirely true under Windows/a new data type called SOCKET was defined./定义一个socket句柄作为服务器SOCKET server;/WSADATA is a struct that is filled up by the call /to WSAStartup/这是一个结构体,用于调用函数WSAStartup时作为参数WSADATA wsaData;/The sockaddr_in specifies the address of the socket/for TCP/IP sockets. Other protocols use similar structures./存放ip地址的结构体sockaddr_in local;/WSAStartup initializes the program for calli

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论