版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
...wd......wd......wd...专业:专业:[通信工程]学生姓名:[完成时间:Time\@"yyyy年M月d日"2022年4月25日实验一网络应用程序根基实验目的:通过实验,使学生熟悉并掌握运用TCP/IP技术进展网络编程的根本知识,加深对课堂教学内容的理解,掌握套接字网络通信编程技术,能够运用VC++为开发工具编程解决网络通信中的实际问题,进展一些简单的网络应用程序设计。实验内容:1,Winsock的启动与终止。2,Winsock的创立及绑定和关闭。3,建设通信连接listen及accept和connect。4,数据的传输。5,简单的客户机/服务器之间的通信。要求:通过在SDK模式下完成数据通信的过程,掌握WindowsSocket的常用函数的形式和使用方法,理解数据通信的过程。实验步骤:1,翻开VC环境使用向导为客户端创立工程:选择可执行程序,选择使用wsa环境,单文档环境,其他的选择默认设置在文件中添加代码编译调试使用向导为服务器端创立工程:选择可执行程序,选择使用wsa环境,单文档环境,其他的选择默认设置在文件中添加代码编译调试分别翻开两个系统命令窗口中,并分别在其中运行客户端和服务器端程序。在客户端侧输入字符,可以看到服务器收到字符串参考代码:课本156页--160页实验结果:Client:#include<Winsock2.h>#include<stdio.h>//服务器端口号为5050#defineDEFAULT_PORT5050#defineDATA_BUFFER1024voidmain(intargc,char*argv[]){ WSADATAwsaData; SOCKETsClient; intiPort=DEFAULT_PORT; //从服务器端接收的数据长度 intiLen; //接收数据的缓冲 charbuf[DATA_BUFFER]; //服务器端地址 structsockaddr_inser; //判断输入的参数是否正确 if(argc<2) { //提示在命令行中输入服务器IP地址 printf("Usage:client[serverIPaddress]\n"); return; } //接收数据的缓冲区初始化 memset(buf,0,sizeof(buf)); if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) { printf("FailedtoloadWinsock.\n"); return; } //填写要连接的服务器地址信息 ser.sin_family=AF_INET; ser.sin_port=htons(iPort); //inet_addr()函数将命令行的点分IP地址转换为用二进制表示的网络字节顺序的IP地址 ser.sin_addr.s_addr=inet_addr(argv[1]); //建设客户端流式套接口 sClient=socket(AF_INET,SOCK_STREAM,0); if(sClient==INVALID_SOCKET) { printf("socket()Failed:%d\n",WSAGetLastError()); return; } //请求与服务器端建设TCP连接 if(connect(sClient,(structsockaddr*)&ser,sizeof(ser))==INVALID_SOCKET) { printf("connect()Failed:%d\n",WSAGetLastError()); return; } else { //从服务器端接收数据 iLen=recv(sClient,buf,sizeof(buf),0); if(iLen==0) return; elseif(iLen==SOCKET_ERROR) { printf("recv()Failed:%d",WSAGetLastError()); return; } printf("recv()datafromserver:%s\n",buf); } closesocket(sClient); WSACleanup();}Server:#include<Winsock2.h>#include<stdio.h>#include<stdlib.h>#pragmacomment(lib,"ws2_32.lib")//服务器使用的端口号为5050#defineDEFAULT_PORT5050voidmain(){ intiPort=DEFAULT_PORT; WSADATAwsaData; SOCKETsListen, sAccept; //客户端地址长度 intiLen; //发送的数据长度 intiSend; //要发送给客户端的信息 charbuf[]="Iamaserver."; //服务器和客户端的IP地址 structsockaddr_inser, cli; printf("---------------------------\n"); printf("Serverwaiting\n"); printf("---------------------------\n"); if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) { printf("FailedtoloadWinsock.\n"); return; } //创立服务器端套接口 sListen=socket(AF_INET,SOCK_STREAM,0); if(sListen==INVALID_SOCKET) { printf("socket()Failed:%d\n",WSAGetLastError()); return; } //以下建设服务器端地址 ser.sin_family=AF_INET; //htons()函数把一个双字节的主机直接顺序的数据转换为网络直接顺序的数 ser.sin_port=htons(iPort); //htonl()函数把一个四字节的主机直接顺序的数据转换为网络直接顺序的数 //使用系统制定的IP地址INADDR_ANY ser.sin_addr.s_addr=htonl(INADDR_ANY); if(bind(sListen,(LPSOCKADDR)&ser,sizeof(ser))==SOCKET_ERROR) { printf("bind()Failed:%d\n",WSAGetLastError()); return; } //进入监听状态 if(listen(sListen,5)==SOCKET_ERROR) { printf("listen()Failed:%d\n",WSAGetLastError()); return; } //初始化客户端地址长度参数 iLen=sizeof(cli); //进入一个无限循环,等待客户的连接请求 while(1) { sAccept=accept(sListen,(structsockaddr*)&cli,&iLen); if(sAccept==INVALID_SOCKET) { printf("accept()Failed:%d\n",WSAGetLastError()); break; } //输出客户IP地址和端口号 printf("AcceptedclientIP:[%s],port:[%d]\n",inet_ntoa(cli.sin_addr),ntohs(cli.sin_port)); //给建设连接的客户发送信息 iSend=send(sAccept,buf,sizeof(buf),0); if(iSend==SOCKET_ERROR) { printf("send()Failed:%d\n",WSAGetLastError()); break; } elseif(iSend==0) break; else { printf("send()byte:%d\n",iSend); printf("---------------------------\n"); } closesocket(sAccept); } closesocket(sListen); WSACleanup();}实验截图:实验二基于TCP协议的客户/服务器通信程序实验目的:通过实验,使学生熟悉并掌握运用TCP/IP技术进展网络编程的根本知识,加深对课堂教学内容的理解,掌握套接字网络通信编程技术,能够运用VC++为开发工具编程解决网络通信中的实际问题,进展一些简单的网络应用程序设计。实验内容:1,主机间TCP的性能测试之一:回程时延。2,服务器端能从客户端接收数据并立即将接收到的数据原样返回给客户方。3,客户端能往服务器端发送数据,然后立即承受从服务器端原样返回的数据。理解TCP通信程序设计过程,并结合特定应用场景〔如创立留言板程序、创立多客户端服务器/客户通信程序等〕完成程序开发。掌握TCP服务器程序和客户程序的创立过程,熟悉单播通信程序中用到的Winsock接口,培养学生将所学知识进展灵活运用的能力。实验步骤:翻开VC环境使用向导为客户端创立工程:选择可执行程序,选择使用wsa环境,单文档环境,其他的选择默认设置在文件中添加代码编译调试使用向导为服务器端创立工程:选择可执行程序,选择使用wsa环境,单文档环境,其他的选择默认设置在文件中添加代码编译调试分别翻开两个系统命令窗口中,并分别在其中运行客户端和服务器端程序。在客户端着输入字符,可以看到服务器收到字符串注:可以再实验一的代码上修改,自己增加额外的功能,比方取系统时间,计算往返时间等作完之后,修改通信代码使用UDP来实现网络通信实验结果:Client:#include<Winsock2.h>#include<stdio.h>#include<stdlib.h>#defineDEFAULT_PORT5050#defineDATA_BUFFER1024#pragmacomment(lib,"WS2_32.lib")voidmain(intargc,char*argv[]){ WSADATAwsaData; SOCKETsClient; intiPort=5050; intiLen; intisend,iRecv; charsend_buf[]="Hello!Iamaclient"; charrecv_buf[DATA_BUFFER]; structsockaddr_inser; if(argc<2) { printf("输入服务器的IP地址:\n"); return; }else memset(recv_buf,0,sizeof(recv_buf)); if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) { printf("Winsock环境初始化失败:\n"); return; }sClient=socket(AF_INET,SOCK_DGRAM,0); if(sClient==INVALID_SOCKET) { printf("socket()函数调用失败:%d\n",WSAGetLastError()); return; } ser.sin_family=AF_INET;ser.sin_port=htons(iPort); ser.sin_addr.s_addr=inet_addr(argv[1]);iLen=sizeof(ser);isend=sendto(sClient,send_buf,sizeof(send_buf),0,(structsockaddr*)&ser,iLen); if(isend==SOCKET_ERROR) { printf("sendto()函数调用失败:%d\n",WSAGetLastError()); return; } elseif(isend==0) return; else printf("sendto()调用成功:\n");iRecv=recvfrom(sClient,recv_buf,sizeof(recv_buf),0,(structsockaddr*)&ser,&iLen);if(iRecv==SOCKET_ERROR) { printf("recvfrom()函数调用失败:%d\n",WSAGetLastError()); return; } elseif(iRecv==0) return; else { printf("sendto():%s\n",recv_buf);printf("-------------------------------\n"); } closesocket(sClient); WSACleanup();}Server:#include<Winsock2.h>#include<stdio.h>#include<stdlib.h>#defineDEFAULT_PORT5050#defineBUFFER_LENGTH1024#pragmacomment(lib,"WS2_32.lib")voidmain(){ intiPort=DEFAULT_PORT; WSADATAwsaData;SOCKETsSocket; intiLen,iRecv,iSend; structsockaddr_inser,cli; charsend_buf[]="Hollo!Iamaserver"; charrecv_buf[BUFFER_LENGTH];printf("--------------------");printf("Serverwaiting");printf("--------------------"); if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) { printf("环境初始化错误:\n"); return; }sSocket=socket(AF_INET,SOCK_DGRAM,0); if(sSocket==INVALID_SOCKET) { printf("socket()函数调用失败:\n",WSAGetLastError()); return; } ser.sin_family=AF_INET; ser.sin_port=htons(iPort); ser.sin_addr.s_addr=htonl(INADDR_ANY); if(bind(sSocket,(LPSOCKADDR)&ser,sizeof(ser))==SOCKET_ERROR) {printf("bind()函数调用失败:\n",WSAGetLastError()); return; }iLen=sizeof(cli); memset(recv_buf,0,sizeof(recv_buf)); while(1) {iRecv=recvfrom(sSocket,recv_buf,BUFFER_LENGTH,0,(SOCKADDR*)&cli,&iLen); if(iRecv==SOCKET_ERROR) {printf("recvfrom()函数调用失败:\n",WSAGetLastError()); break; } elseif(iRecv==0) break;else { printf("recvfrom():%d\n",recv_buf);printf("客户端的IP地址、端口号:%d\n",inet_ntoa(cli.sin_addr),ntohs(cli.sin_port)); } iSend=sendto(sSocket,send_buf,sizeof(send_buf),0,(SOCKADDR*)&cli,sizeof(cli));if(iSend==SOCKET_ERROR) {printf("sendto()函数调用失败:\n",WSAGetLastError()); break; } elseif(iSend==0) break;else { printf("sendto():调用成功!\n"); } } closesocket(sSocket); WSACleanup();}实验截图:实验三简易聊天系统的实现实验目的:通过实验,使学生熟悉并掌握运用TCP/IP技术进展网络编程的根本知识,加深对课堂教学内容的理解,掌握套接字网络通信编程技术,能够运用VC++为开发工具编程解决网络通信中的实际问题,进展一些简单的网络应用程序设计。实验内容:设计实现包括客户端和服务器端的简单聊天系统。通过编写简单的聊天程序,理解MFC的Socket类同SocketAPI之间的区别以及MFC的两种类之间的联系与区别。实验步骤:翻开VC环境使用向导为客户端创立工程:选择FMC可执行程序,选择使用wsa环境,选择单文档环境,其他的选择默认设置为对话窗添加控件:右击工具栏选择控件,拖拽某个控件到对话框为控件添加变量:使用类向导,选择要操作的对话窗类,选择变量Tab,点击添加变量按钮,为变量命名并选择变量类型。为控件添加代码:右击控件添加事件,如点击,双击,右击。为事件添加代码,根据教科书添加代码添加新的对话窗:单机rousourceTab,在对话窗出右击,选择添加对话窗,为对话窗添加类:右键点击新对话窗,选择添加类,出现向导,为类命名并选择父类为心对话窗添加控件和变量为新对话窗添加代码编译调试参考代码:课本224页--229页实验结果:CsockClient:#include"stdafx.h"#include"CSockClient.h"#include"CSockClientDlg.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CCSockClientAppBEGIN_MESSAGE_MAP(CCSockClientApp,CWinApp) //{{AFX_MSG_MAP(CCSockClientApp) //NOTE-theClassWizardwilladdandremovemappingmacroshere. //DONOTEDITwhatyouseeintheseblocksofgeneratedcode! //}}AFX_MSG ON_COMMAND(ID_HELP,CWinApp::OnHelp)END_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CCSockClientAppconstructionCCSockClientApp::CCSockClientApp(){ //TODO:addconstructioncodehere, //PlaceallsignificantinitializationinInitInstance}///////////////////////////////////////////////////////////////////////////////TheoneandonlyCCSockClientAppobjectCCSockClientApptheApp;///////////////////////////////////////////////////////////////////////////////CCSockClientAppinitializationBOOLCCSockClientApp::InitInstance(){ if(!AfxSocketInit()) { AfxMessageBox(IDP_SOCKETS_INIT_FAILED); returnFALSE; } AfxEnableControlContainer(); //Standardinitialization //Ifyouarenotusingthesefeaturesandwishtoreducethesize //ofyourfinalexecutable,youshouldremovefromthefollowing //thespecificinitializationroutinesyoudonotneed.#ifdef_AFXDLL Enable3dControls(); //CallthiswhenusingMFCinasharedDLL#else Enable3dControlsStatic(); //CallthiswhenlinkingtoMFCstatically#endif CCSockClientDlgdlg; m_pMainWnd=&dlg; intnResponse=dlg.DoModal(); if(nResponse==IDOK) { //TODO:Placecodeheretohandlewhenthedialogis //dismissedwithOK } elseif(nResponse==IDCANCEL) { //TODO:Placecodeheretohandlewhenthedialogis //dismissedwithCancel } //Sincethedialoghasbeenclosed,returnFALSEsothatweexitthe //application,ratherthanstarttheapplication'smessagepump. returnFALSE;}CsockServer:#include"stdafx.h"#include"CsockServer.h"#include"CsockServerDlg.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CCsockServerAppBEGIN_MESSAGE_MAP(CCsockServerApp,CWinApp) //{{AFX_MSG_MAP(CCsockServerApp) //NOTE-theClassWizardwilladdandremovemappingmacroshere. //DONOTEDITwhatyouseeintheseblocksofgeneratedcode! //}}AFX_MSG ON_COMMAND(ID_HELP,CWinApp::OnHelp)END_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CCsockServerAppconstructionCCsockServerApp::CCsockServerApp(){ //TODO:addconstructioncodehere, //PlaceallsignificantinitializationinInitInstance}///////////////////////////////////////////////////////////////////////////////TheoneandonlyCCsockServerAppobjectCCsockServerApptheApp;///////////////////////////////////////////////////////////////////////////////CCsockServerAppinitializationBOOLCCsockServerApp::InitInstance(){ if(!AfxSocketInit()) { AfxMessageBox(IDP_SOCKETS_INIT_FAILED); returnFALSE; } AfxEnableControlContainer(); //Standardinitialization //Ifyouarenotusingthesefeaturesandwishtoreducethesize //ofyourfinalexecutable,youshouldremovefromthefollowing //thespecificinitializationroutinesyoudonotneed.#ifdef_AFXDLL Enable3dControls(); //CallthiswhenusingMFCinasharedDLL#else Enable3dControlsStatic(); //CallthiswhenlinkingtoMFCstatically#endif CCsockServerDlgdlg; m_pMainWnd=&dlg; intnResponse=dlg.DoModal(); if(nResponse==IDOK) { //TODO:Placecodeheretohandlewhenthedialogis //dismissedwithOK } elseif(nResponse==IDCANCEL) { //TODO:Placecodeheretohandlewhenthedialogis //dismissedwithCancel } //Sincethedialoghasbeenclosed,returnFALSEsothatweexitthe //application,ratherthanstarttheapplication'smessagepump. returnFALSE;}实验截图:实验四WinInet实现FTP客户端实验目的:通过实验,使学生熟悉并掌握运用TCP/IP技术进展网络编程的根本知识,加深对课堂教学内容的理解,掌握套接字网络通信编程技术,能够运用VC++为开发工具编程解决网络通信中的实际问题,进展一些简单的网络应用程序设计。实验内容:1,写出完整的软件需求说明书。2,开发FTP的客户端。3,完成在局域网内的测试,并记录测试结果。本实验涵盖了C/S体系构造和Socket编程。通过本实验深入地了解FTP的工作原理以及服务器端和客户端的工作流程,学习Socket在网络编程中的各种应用,掌握WinInet的套接字编程。实验步骤:翻开VC环境使用向导为客户端创立工程:选择MFC可执行程序,单文档环境,其他的选择默认设置为对话窗添加控件:右击工具栏选择控件,拖拽某个控件到对话框为控件添加变量:使用类向导,选择要操作的对话窗类,选择变量Tab,点击添加变量按钮,为变量命名并选择变量类型。为控件添加代码:右击控件添加事件,如点击,双击,右击。为事件添加代码,根据教科书添加代码编译调试实验结果:Scan:#include"stdafx.h"#include"scan.h"#include"scanDlg.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CScanAppBEGIN_MESSAGE_MAP(CScanApp,CWinApp) //{{AFX_MSG_MAP(CScanApp) //NOTE-theClassWizardwilladdandremovemappingmacroshere. //DONOTEDITwhat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度智慧社区车位共享管理服务合同范本3篇
- 2024跨境教育服务合作合同
- 2025年度住宅小区车位租赁押金退还及违约责任合同4篇
- 2025年度校园窗帘设计与施工一体化服务合同3篇
- 2025年度物流金融承运商合作协议范本8篇
- 2025年度特种物品储藏安全管理合同4篇
- 2025年度工业遗产保护与拆迁补偿协议3篇
- 2025年度智慧农业监测系统采购合同4篇
- 2024版门面精装修产权转让协议
- 2025年员工辞退后债权债务处理协议3篇
- 2024版个人私有房屋购买合同
- 2025年山东光明电力服务公司招聘笔试参考题库含答案解析
- 2024爆炸物运输安全保障协议版B版
- 《神经发展障碍 儿童社交沟通障碍康复规范》
- 2025年中建六局二级子企业总经理岗位公开招聘高频重点提升(共500题)附带答案详解
- 2024年5月江苏省事业单位招聘考试【综合知识与能力素质】真题及答案解析(管理类和其他类)
- 注浆工安全技术措施
- 《食品与食品》课件
- 2024年世界职业院校技能大赛“食品安全与质量检测组”参考试题库(含答案)
- 读书分享会《白夜行》
- 2023上海高考英语词汇手册单词背诵默写表格(复习必背)
评论
0/150
提交评论