您好,欢迎访问三七文档
淮海工学院计算机工程学院实验报告书课程名:《计算机网络》题目:实验四基于Socket的C/S程序开发班级:学号:姓名:评语:成绩:指导教师:批阅时间:年月日《计算机网络》实验报告-1-一、实验目的和要求通过本次实验,熟悉客户-服务器模式的工作原理,使用socket通信一个编写客户端和服务器端之间通信的程序。二、实验内容使用socket编写客户端和服务器端之间通信的程序,要求:从标准输入获取客户端的输入,将其发送到服务器端,并将服务器端所返回的信息显示在客户端的标准输出。三、主要实验仪器及材料装有Windows2000/XP系统的计算机,局域网,java或其他编程语言。四、实验原理与源程序原理:1、创建socket2、打开连接到socket的输入/输出流3、按照一定协议对socket进行读/写操作4、关闭socket源程序服务器端#includeWinsock.h#includewindows.h#includestdio.h#pragmacomment(lib,wsock32.lib)#defineRECV_PORT2000#defineSEND_PORT3000SOCKETsock,sock1;sockaddr_inServerAddr;sockaddr_inClientAddr;intAddrlen;DWORDStartSock(){《计算机网络》实验报告-2-WSADATAWSAData;if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0){printf(sockinitfail!\n);return(-1);}return(1);}DWORDCreateSocket(){sock=socket(AF_INET,SOCK_STREAM,0);if(sock==SOCKET_ERROR){printf(sockcreatefail!\n);WSACleanup();return(-1);}ServerAddr.sin_family=AF_INET;ServerAddr.sin_addr.s_addr=htonl(INADDR_ANY);ServerAddr.sin_port=htons(RECV_PORT);if(bind(sock,(structsockaddrFAR*)&ServerAddr,sizeof(ServerAddr))==SOCKET_ERROR){printf(bindistheerror);return(-1);}return(1);}DWORDTCPS();《计算机网络》实验报告-3-DWORDConnectProcess(){charbuff[80];Addrlen=sizeof(sockaddr_in);if(listen(sock,5)0){printf(搜索出错!);return(-1);}printf(正在搜索...\n);for(;;){sock1=accept(sock,(structsockaddrFAR*)&ClientAddr,&Addrlen);for(;;){memset(buff,0,80);if(recv(sock1,buff,80,0)=0){break;}if(strcmp(buff,exit)==0){closesocket(sock1);WSACleanup();exit(0);}printf(接收到的信息是:);printf(buff);printf(\n);TCPS();}《计算机网络》实验报告-4-}}DWORDTCPSend(chardata[]){intlength;length=send(sock1,data,strlen(data),0);if(length=0){printf(发送数据出错!\n);closesocket(sock1);WSACleanup();return(-1);}return(1);}DWORDTCPRecv(chardata[]){charbuff[80];Addrlen=sizeof(sockaddr_in);sock1=accept(sock,(structsockaddrFAR*)&ServerAddr,&Addrlen);while(sock1!=SOCKET_ERROR){memset(buff,0,80);if(recv(sock1,buff,80,0)=0){break;}printf(buff);}printf(\n);《计算机网络》实验报告-5-return(1);}DWORDTCPS(){charbuff[80];charnum[80];memset(buff,0,80);printf(请输入要发送的信息(输入exit结束通信):);scanf(%s,&num);strcpy(buff,num);if(strcmp(buff,exit)==0){printf(服务器关闭!\n);TCPSend(buff);closesocket(sock1);exit(0);}printf(\n);TCPSend(buff);return1;}intmain(){if(StartSock()==-1)return(-1);if(CreateSocket()==-1)return(-1);if(ConnectProcess()==-1)return(-1);if(TCPS()==-1)《计算机网络》实验报告-6-return(0);StartSock();CreateSocket();for(;;)ConnectProcess();return(1);}客户端#includeWinsock.h#includewindows.h#includestdio.h#pragmacomment(lib,wsock32.lib)#defineRECV_PORT2000#defineSEND_PORT4000SOCKETsock,sock1;sockaddr_inServerAddr;intAddrlen;DWORDStartSock(){WSADATAWSAData;if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0){printf(sockinitfail!\n);return(-1);}ServerAddr.sin_family=AF_INET;ServerAddr.sin_addr.s_addr=inet_addr(127.0.0.1);ServerAddr.sin_port=htons(RECV_PORT);return1;《计算机网络》实验报告-7-}DWORDCreateSocket(){sock=socket(AF_INET,SOCK_STREAM,0);if(sock==SOCKET_ERROR){printf(sockcreatefail!\n);WSACleanup();return(-1);}return1;}DWORDCallServer(){CreateSocket();if(connect(sock,(structsockaddr*)&ServerAddr,sizeof(ServerAddr))==SOCKET_ERROR){printf(连接失败!\n);closesocket(sock);return(-1);}return1;}DWORDTCPRecv();DWORDTCPSend(chardata[]){intlength;length=send(sock,data,strlen(data),0);《计算机网络》实验报告-8-if(length=0){printf(发送数据错误!\n);closesocket(sock);WSACleanup();return(-1);}TCPRecv();return(1);}DWORDTCPRecv(){charbuff[80];memset(buff,0,80);if(recv(sock,buff,80,0)=0){return-1;}if(strcmp(buff,exit)==0){closesocket(sock1);WSACleanup();exit(0);}printf(接收到的信息是:);printf(buff);printf(\n);return(1);}intmain()《计算机网络》实验报告-9-{charbuff[80];charnum[80];StartSock();while(CallServer()==-1);printf(通信连接成功\n);printf(请按Enter开始通信\n);getchar();for(;;){printf(请输入要发送的信息(输入exit结束通信):);memset(buff,0,80);scanf(%s,&num);if(num=0)break;strcpy(buff,num);if(strcmp(buff,exit)==0){printf(通信结束!\n);TCPSend(buff);closesocket(sock1);exit(0);}printf(\n);TCPSend(buff);}return(0);}五、实验结果《计算机网络》实验报告-10-图一客户端连接失败图二服务器端搜索连接图三客户端与服务器端建立连接图四客户端发送信息图五服务器端与客户端进行通信图六通信结束《计算机网络》实验报告-11-六、实验小结客户机和服务器都是独立的计算机。当一台连入网络的计算机向其他计算机提供各种网络服务(如数据、文件的共享等)时,它就被叫做服务器。而那些用于访问服务器资料的计算机则被叫做客户机。严格说来,客户机/服务器模型并不是从物理分布的角度来定义,它所体现的是一种网络数据访问的实现方式。客户机/服务器模式将一个应用分为两个部分:前端(客户端)、后端(服务器)。在本次实验中用到的Socket通信的原理如下哦:服务器端的步骤(1)建立服务器端的Socket,开始侦听整个网络中的连接请求。(2)当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接。(3)当完成通信后,服务器关闭与客户端的Socket连接。客户端的步骤(1)建立客户端的Socket,确定要连接的服务器的主机名和端口。(2)发送连接请求到服务器,并等待服务器的回馈信息。(3)连接成功后,与服务器进行数据的交互。(4)数据处理完毕后,关闭自身的Socket连接。
本文标题:计算机网络-实验四
链接地址:https://www.777doc.com/doc-5749246 .html