您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 实验07-TCP-IP-Socket编程
《计算机网络》实验报告实验序号:7实验项目名称:TCP/IPSocket编程学号姓名专业、班实验地点实1-514指导教师实验时间2013-12-16一、实验目的及要求1、进一步掌握TCP及UDP协议的工作原理2、掌握socket编程的基本方法3、学习应用C语言与WinSock2进行简单的面向连接或无连接的网络程序设计,实现网络数据传输。或使用java语言编程实现。二、实验课时6课时三、实验内容和方法:(1)分别编写基于TCP的socket程序服务端和客户端,要求客户端能发送消息到服务端,服务端再把此消息返回给客户端。(2)在上述程序的基础上,实现客户端和服务端间的简易聊天功能,即服务端和客户端能依次从键盘输入文字信息并发送(要求在两台不同的电脑上进行)。(3)改用UDP实现此程序的功能。(4)使用netstat命令观察程序运行前后的端口变化情况并记录下来。以下内容可选做(注:可只用命令行字符界面实现):(5)实现服务端能同时连接多个客户端(6)服务端实现消息转发到任意一个客户端,设计通信协议,使得任意一个客户端都能通过服务端与另外任意一个联网客户端进行聊天。实验步骤基于TCP协议的控制台通信程序Server.cpp:#includestdio.h#includewinsock.h#pragmacomment(lib,ws2_32)voidmain(){SOCKETjianting;//监听套接字SOCKEThuihua;//会话套接字sockaddr_inmycomputerinfo;sockaddr_inelsecomputerinfo;//服务端及客户端的地址信息intlen=sizeof(sockaddr);charrecvbuf[128];charsendbuf[128];//定义缓冲区mycomputerinfo.sin_family=AF_INET;mycomputerinfo.sin_port=htons(2000);mycomputerinfo.sin_addr.s_addr=INADDR_ANY;//服务器主机地址,该宏指代本机IPWSADATAws;WSAStartup(MAKEWORD(2,2),&ws);jianting=socket(AF_INET,SOCK_STREAM,0);bind(jianting,(sockaddr*)&mycomputerinfo,len);listen(jianting,5);huihua=accept(jianting,(sockaddr*)&elsecomputerinfo,&len);while(true){recv(huihua,recvbuf,128,0);char*str=inet_ntoa(elsecomputerinfo.sin_addr);printf(%s说:%s\n,str,recvbuf);gets(sendbuf);send(huihua,sendbuf,strlen(sendbuf)+1,0);}closesocket(jianting);closesocket(huihua);WSACleanup();}Client.cpp:#includestdio.h#includewinsock.h#pragmacomment(lib,ws2_32)voidmain(){SOCKEThuihua;intjiancelink;sockaddr_inmycomputerinfo;sockaddr_inelsecomputerinfo;intlen=sizeof(sockaddr);charrecvbuf[128];charsendbuf[128];mycomputerinfo.sin_family=AF_INET;mycomputerinfo.sin_port=0;mycomputerinfo.sin_addr.s_addr=INADDR_ANY;elsecomputerinfo.sin_family=AF_INET;elsecomputerinfo.sin_port=htons(2000);elsecomputerinfo.sin_addr.s_addr=inet_addr(172.16.192.136);//这里填写服务端的IPWSADATAws;WSAStartup(MAKEWORD(2,2),&ws);huihua=socket(AF_INET,SOCK_STREAM,0);bind(huihua,(sockaddr*)&mycomputerinfo,len);jiancelink=connect(huihua,(sockaddr*)&elsecomputerinfo,len);while(true){if(jiancelink==-1){printf(connecterror!pleaseopenserverbeforedothis.);return;}gets(sendbuf);send(huihua,sendbuf,strlen(sendbuf)+1,0);recv(huihua,recvbuf,128,0);char*str=inet_ntoa(elsecomputerinfo.sin_addr);printf(%s说:%s\n,str,recvbuf);}closesocket(huihua);WSACleanup();}基于UDP协议的控制台通信程序UDPServer创建流程:WSAStartup(...)-socket(...)-bind(...)-recvfrom(...)-closesocket(...)-WSACleanup();UDPClient创建流程:WSAStartup(...)-socket(...)-sendto(...)-closesocket(...)-WSACleanup();Client.cpp:#includestdio.h#includewinsock.h#pragmacomment(lib,ws2_32)voidmain(){SOCKEThuihua;sockaddr_inelsecomputerinfo;intlen=sizeof(sockaddr);charrecvfrombuf[128];charsendtobuf[128];WSADATAws;WSAStartup(MAKEWORD(2,2),&ws);huihua=socket(AF_INET,SOCK_DGRAM,0);elsecomputerinfo.sin_family=AF_INET;elsecomputerinfo.sin_port=htons(2000);elsecomputerinfo.sin_addr.s_addr=inet_addr(172.16.192.136);while(true){gets(sendtobuf);sendto(huihua,sendtobuf,strlen(sendtobuf)+1,0,(sockaddr*)&elsecomputerinfo,len);recvfrom(huihua,recvfrombuf,128,0,(sockaddr*)&elsecomputerinfo,&len);char*str=inet_ntoa(elsecomputerinfo.sin_addr);printf(%s:%s\n,str,recvfrombuf);}closesocket(huihua);WSACleanup();}Server.cpp:#includestdio.h#includewinsock.h#pragmacomment(lib,ws2_32)voidmain(){SOCKEThuihua;sockaddr_inmycomputerinfo;sockaddr_inelsecomputerinfo;intlen=sizeof(sockaddr);charrecvfrombuf[128];charsendtobuf[128];WSADATAws;WSAStartup(MAKEWORD(2,2),&ws);huihua=socket(AF_INET,SOCK_DGRAM,0);mycomputerinfo.sin_family=AF_INET;mycomputerinfo.sin_port=htons(2000);mycomputerinfo.sin_addr.s_addr=INADDR_ANY;bind(huihua,(sockaddr*)&mycomputerinfo,len);while(true){recvfrom(huihua,recvfrombuf,128,0,(sockaddr*)&elsecomputerinfo,&len);char*str=inet_ntoa(elsecomputerinfo.sin_addr);printf(%s:%s\n,str,recvfrombuf);gets(sendtobuf);sendto(huihua,sendtobuf,strlen(sendtobuf)+1,0,(sockaddr*)&elsecomputerinfo,len);}closesocket(huihua);WSACleanup();}四、实验心得体会五、教师评语成绩签名:日期:
本文标题:实验07-TCP-IP-Socket编程
链接地址:https://www.777doc.com/doc-5725136 .html