1、实验七简单的服务器客户端程序实验报告系别洛阳理工学院实验报告计算机系班级B120503学号B12050316姓名段浴课程名称计算机网络实验日期2014/11/8实验名称简单的客户/服务器程序设计与实现成绩实验目的:1、 熟悉 Microsoft Visual Studio 2008 编程环境。2、 了解TCP与UDP协议,以及它们之间的区别。3、 了解客户/服务器模型原理。4、 熟悉Socket编程原理,掌握简单的套接字编程。实验条件:硬件:PC机(两台以上)、网卡、已经设定好的以太网环境软件:Microsoft Visual Studio 2008实验原理:1、编写用TCP协议实现的Clie
2、nt端和Server端程序并调试通过Socket()建立流式套接字,返回套接字号。bind(),套接字s与本地地址相连。listen(),通知TCP,服务器准备好接收连接。accept。,接受连接,等待客户端的连接.连接建立,accept。返回,得到新的套接字,screcvt()/send(),在套接字sc上读/写数据,直到数据交换完毕closesocket(),关闭套接字 scclosesocket(),关闭最初套接字 s,服务结束客户方Socket(),建立流失套接字,返回套接字号connect(),将套接字s与远地主机连接sen d()/recv(),在套接字上读/写数据,直到数据交换完
3、closesocket(),关闭套接字结束TCP对话实验内容:Sever端代码:/server.cpp:定义控制台应用程序的入口点。#include #include #include #include #pragmacomment(lib, WS2_32)SOCKET sock1,sock2;int sin_size;struct sockaddr_in my_addr,their_addr;char name20;初始化函数Tcpvoid Init()printf(nnn Server: TCPnnn);/建立套接字const WORD wMinver=0x0101;WSADA TA ws
4、adata;if(0!=:WSAStartup(wMinver,&wsadata)perror(Start socket error!);if(INV ALID_SOCKET=(sock仁:socket(AF_INET,SOCK_STREAM,0)perror(Create socket error!);my_addr.sin_family=AFN ET;my_addr.sin_addr.S_un.S_addr=INADDR_ANY;my_addr.sin_port=htons(1000);if(SOCKET_ERROR=:bind(sock1,(struct sockaddr*)&my_ad
5、dr,sizeof(my_addr) perror(Binding stream socket);exit(1);/开始侦听if(SOCKET_ERROR=:listen(sock1,5)perror(Listening stream socket);exit(1);/接受连接printf( Ready to serve client. Please connect.nnn);sin_size= sizeof(struct sockaddr_in);if(sock2=accept(sock1,(struct sockaddr *)&their_addr,&sin_size)=-1)perror
6、(Accepting stream socket);exit(1);printf(” 选择菜单int menu()Accepting anewconnet:%s,inet_ntoa(their_addr.sin_addr);char *s=(char*)malloc(2*sizeof(char);int c;printf(nnnServer: Menunnn);printf(*nn);printf(*1.SendMessage*n);printf(*2.Receive Message*n);printf(*3.Exit*nn);printf(*n);doprintf(n Enter your
7、choice:);gets(s);if(s0=0)gets(s);c=atoi(s);while(c3);free(s);return c;消息发送函数void Send()char Msg10240;printf(nPlease Input the message:);gets(Msg);Msg10239=0;:send(sock2,Msg,strlen(Msg),0);消息接收函数void Receive()int len;charbuf10240;for(int i=0;i10240;i+)bufi=0;if(len=:recv(sock2,buf,10240,0)=-1)perror(
8、Receving data error);exit(1);printf(The Received Message:%sn,buf);主函数void main()Init();for(;)switch(menu()case1:Send();break;case2:Receive();break;case3:exit(0);:closesocket(sock2);:closesocket(sock1);:WSACIeanup();Client端代码:/ client.cpp :定义控制台应用程序的入口点。 /#include #include #include #include #pragmaco
9、mment(lib, WS2_32)SOCKET sock1,sock2;int sin_size;struct sockaddr_in my_addr,their_addr;char name20;初始化函数Tcpvoid Init()printf(nnn Client: TCPnnn);/建立套接字const WORD wMinver=0x0101;WSADA TA wsadata;if(0!=:WSAStartup(wMi nver, &wsadata)perror(Start socket error);if(INV ALID_SOCKET=(sock仁:socket(AF_INET,
10、SOCK_STREAM,0)perror(Create socket error!);my_addr.sin_family=AFN ET;my_addr.sin_addr.S_ un .S_addr=i net_addr(192.168.93.48); my_addr.s in _port=ht on s(1000);/请求连接printf(” connectin g.);sin_size = sizeof(struct sockaddr_in);if(sock2=(:co nn ect(sock1,(LPSOCKADDR)&my_addr,sin_size)=-1) perror(Accep
11、ting stream socket);exit(1);II选择菜单int menu()char *s=(char*)malloc(2*sizeof(char);Men unnn);int c;prin tf(nnnprin tf(*nn);printf(*n);printf( *n);printf( *nn);printf(*n);doprin tf(n gets(s); if(sO=O) gets(s);c=atoi(s); while(c3); free(s); return c;Clie nt:1.Se nd Message2.Receive Message* 3.ExitEnter
12、your choice:);/消息发送函数void Send()char Msg10240;prin tf(nPlease In put the message:);gets(Msg);Msg10239=0;:se nd(sock1,Msg,strle n( Msg),0);/消息接收函数void Receive() int len;char buf10240;for(int i=0;i10240;i+)bufi=O:if(le n=:recv(sock1,buf,10240,0)=-1)perror(Receving data error); exit(1);printf(The Received Message:%sn,buf);/主函数void main()In it();for(;)switch(me nu() case1:Se nd(); break;case2: Receive(); break;case3:exit(0);:closesocket(sock2);:closesocket(sock1); :WSAClea nup();实验结果Server端界面:发送信息曲 E八计負粗商4HI 实瑩七HI i DflhnfCl i r*nt_ pnnGonncm七d.nsi Client: Menu1.Gan!2.Beehive3.E
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1