网体实验指导书范文.doc_第1页
网体实验指导书范文.doc_第2页
网体实验指导书范文.doc_第3页
网体实验指导书范文.doc_第4页
网体实验指导书范文.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

网体实验指导书范文 网络体系结构实验指导书网络工程专业适用周之平编南昌航空大学计算机学院网络教研室二零零七年九月实验一数据链路层协议设计与实现1实验目的1)掌握Visual C+网络编程的基本方法和客户机/服务器架构的工作原理。 2)设计数据链路层协议,并通过试验仿真测试协议算法。 2实验环境1)各计算机装有Windows系统,TCP/IP协议软件和Visual C+6.0开发工具。 2)信道仿真模拟软件xds。 3实验要求1)根据提供的参考程序和连续ARQ协议的伪代码,设计数据链路层通信协议带有滑动窗口的选择性重传ARQ协议和回退N重传ARQ协议,由“发送端程序”和“接收端程序”实现。 2)要求能检测差错和丢失,判断重复帧,实现重传,确保数据可靠传输。 3)发送端和接收端窗口能正确反映客户端和服务器端数据通信过程。 4)总结实验过程(实验报告),方案、编码、调试、结果、分析和结论。 4实验帮助4.1协议设计建议a)协议中不考虑成帧1)2)3)数据帧和应答帧以字节为单位;数据帧低4位D3D0为数据段(取值0000B1001B,即09),最高位为校验码(D7),发送序号段D6D4;应答帧确认帧ACK;低4位D3D0取值1111B(FH),否认帧NAK;低4位D3D0取值1110B(EH),发送序号段D6D4;4)按上述定义,发送序号个数最大为8,实际使用时,可自行选取发送序号个数2或4,甚至不使用。 b)协议方案提示1)2)3)连续ARQ协议回退N帧ARQ协议;应采用滑动窗口技术和否认帧应携带出错数据帧的发送序号。 连续ARQ协议选择重发ARQ协议;基本同上。 教师提供的源程序(客户端和接收端)能实现“停止等待协议”,在此基础上进行扩展,完成实验任务。 4.2信道仿真程序1功能可仿真信道上的信息(数据帧或应答帧)产生丢失、产生差错和传输时延;2界面4.3实验系统原理1“发送端程序”、“信道仿真程序”和“接收端程序”采用UDP协议(TCP/IP)进行通信;2若单机实验“发送端程序“、“信道仿真程序”和“接收端程序”的IP地址设置尾(本机)。 3“发送端程序“的端口6666,“信道仿真程序”的端口7777,“接收端程序”的端口8888,端口号也可自行定义;4用户程序(“发送端程序”和“接收端程序”)的信息发送到信道(“信道仿真程序”),信道经过处理产生丢失、差错和时延,然后发送到对方。 5仿真过程中可通过对信道仿真程序软件的环境进行设定,来模拟链路特性。 4.4实验系统实例注1“481H80H”,表示信道上第第4个信息帧产生差错,信息值由81H变为80H;2“581H丢失”表示信道上第5个信息帧产生丢失。 5实验参考程序5.1回退N重传ARQ程序/变量定义#define MAX_PKT4/*determines packetsize inbytes*/typedef enumfalse,trueboolean;/*boolean type*/typedef unsigned int seq_nr;/*sequence orack numbers*/typedef structunsigned chardataMAX_PKT;packet;/*packet definition*/typedef enumdata,ack,nakframe_kind;/*frame_kind definition*/typedef struct/*frames aretransported in this layer*/frame_kind kind;/*what kindof aframe isit?*/seq_nr seq;/*sequence number*/seq_nr ack;/*acknowledgement number*/packet info;/*the worklayer packet*/frame;#define inc(k)if(k1;used foroutbound stream*/seq_nr ack_expected;/*oldest frameas yetunacknowledged*/seq_nr frame_expected;/*next frame expected oninbound stream*/frame r;/*scratch variable*/packet bufferMAX_SEQ+1;/*buffers forthe outboundstream*/seq_nr nbuffered;/*#output bufferscurrently inuse*/seq_nr i;/*used toindex into the bufferarray*/event_type event;enable_work_layer();/*allow work_layer_ready events*/ack_expected=0;/*next ackexpected inbound*/next_frame_to_send=0;/*next framegoing out*/frame_expected=0;/*number offrameexpectedinbound*/nbuffered=0;/*initially nopackets arebuffered*/while(true)wait_for_event(&event);/*four possibilities:see event_type above*/switch(event)case work_layer_ready:/*the worklayer has a packetto send*/*Aept,save,and transmita newframe.*/from_work_layer(&buffernext_frame_to_send);/*fetch newpacket*/nbuffered=nbuffered+1;/*expand thesenders window*/*transmit theframe*/send_data(next_frame_to_send,frame_expected,buffer);inc(next_frame_to_send);/*advance senders upperwindow edge*/break;case frame_arrival:/*a dataor controlframe hasarrived*/from_physical_layer(&r);/*get iningframe fromphysical layer*/if(r.seq=frame_expected)/*Frames areaepted onlyin order.*/to_work_layer(&);/*pass packetto worklayer*/inc(frame_expected);/*advance lower edge of receivers window*/*Ack nimplies n-1,n-2,etc.Check forthis.*/while(between(ack_expected,r.ack,next_frame_to_send)/*Handle piggybackedack.*/nbuffered=nbuffered-1;/*one framefewer buffered*/stop_timer(ack_expected);/*frame arrivedintact;stop timer*/inc(ack_expected);/*contract senders window*/break;case cksum_err:;/*just ignorebad frames*/break;case timeout:/*trouble;retransmit alloutstanding frames*/next_frame_to_send=ack_expected;/*start retransmittinghere*/for(i=1;i3)strcpy(szServerip,&argvi3);break;casen:/Numberoftimestosendmessageif(strlen(argvi)3)/dwCount=atol(&argvi3);break;caseo:/Only sendmessage;dont receivebSendOnly=TRUE;break;default:usage();break;in tm ain(in targc,char*argv)WSADATA wsd;SOCKET sClient;char szBufferDEFAULT_BUFFER;int ret;/unsignedinti;/int j;struct sockaddr_in server;struct hostent*host=NULL;char choice5,choice240;/Parse themand lineand load Winsock/argv1=-s:;strcpy(szServerip,&argv13);/ValidateArgs(argc,argv);if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)printf(Failed toloadWinsocklibrary!n);return1;/strcpy(szMessage,DEFAULT_MESSAGE);/Create thesocket,and attempttoconnect totheserver/sClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(sClient=INVALID_SOCKET)printf(socket()failed:%dn,WSAGetLastError();return1;server.sin_family=AF_INET;server.sin_port=htons(iPort);printf(server.sin_port=%un,server.sin_port);server.sin_addr.s_addr=i_addr(szServerip);/If thesupplied serveraddress wasntin the form/aaa.bbb.c.ddditsahostname,so tryto resolveit/if(server.sin_addr.s_addr=INADDR_NONE)host=gethostbyname(szServerip);if(host=NULL)printf(Unable toresolve server:%sn,szServerip);return1;CopyMemory(&server.sin_addr,host-h_addr_list0,host-h_length);if(connect(sClient,(struct sockaddr*)&server,sizeof(server)=SOCKET_ERROR)printf(connect()failed:%dn,WSAGetLastError();return1;/显示接通信息/for(j=0;j2;j+)/ret=recv(sClient,szBuffer,DEFAULT_BUFFER,0);if(ret=0)/Graceful closereturn0;else if(ret=SOCKET_ERROR)printf(recv()failed:%dn,WSAGetLastError();return0;szBufferret=0;printf(%sn,szBuffer);if(ret);scanf(%s,choice);if(strncmp(choice,dir,3)=0|strncmp(choice,DIR,2)=0)dirfun(sClient);continue;else if(strncmp(choice,pwd,3)=0|strncmp(choice,PWD,3)=0)pwdfun(sClient);continue;else if(strncmp(choice,?,1)=0)usafun(sClient);continue;else if(strncmp(choice,quit,4)=0|strncmp(choice,QUIT,2)=0)break;scanf(%s,choice2);if(strncmp(choice,get,3)=0|strncmp(choice,GET,3)=0)getfun(sClient,choice2);continue;else if(strncmp(choice,put,3)=0|strncmp(choice,PUT,3)=0)putfun(sClient,choice2);continue;else if(strncmp(choice,cd,2)=0|strncmp(choice,CD,2)=0)cdfun(sClient,choice2);continue;else if(strncmp(choice,md,2)=0|strncmp(choice,MD,2)=0)mdfun(sClient,choice2);continue;else if(strncmp(choice,del,3)=0|strncmp(choice,DEL,3)=0)delfun(sClient,choice2);continue;/else puts(输入错误,请重新输入);fflush(stdin);fflush(stdin);printf(n);printf(n);closesocket(sClient);WSACleanup();return0;in tdirfun(SOCKET sClient)int ret;char*MSG=dir$;char szBuffer80;strcpy(szMessage,MSG);ret=send(sClient,szMessage,strlen(szMessage),0);if(ret=0)return1;else if(ret=SOCKET_ERROR)printf(send()failed:%dn,WSAGetLastError();return1;/printf(Send%d bytesn,ret);/printf(bSendOnly=%dn,bSendOnly);while(!bSendOnly)/读取流并显示/ret=recv(sClient,szBuffer,80,0);/printf(%s,szBuffer);ret=recv(sClient,szBuffer,80,0);if(ret=0)/Graceful closereturn1;else if(ret=SOCKET_ERROR)printf(recv()failed:%dn,WSAGetLastError();return1;szBufferret=0;if(strncmp(szBuffer,226Close,strlen(226Close)=0)break;printf(%s,szBuffer);if(strncmp(szBuffer,500Syntax error,strlen(500Syntax error)=0)break;return0;in tgetfun(SOCKET sClient,ch arfilenam e40)int ret;FILE*fpre;char szBuffer80;szMessage0=0;strcat(szMessage,get$);/strcat(szMessage,);strcat(szMessage,filename);/printf(MSG4=%cn,szMessage4);/szMessage0=g;szMessage1=e;szMessage2=t;/szMessage4=m;szMessage5=e;szMessage6=.;szMessage7=t;/szMessage8=x;szMessage9=t;szMessage10=0;ret=send(sClient,szMessage,strlen(szMessage)+1,0);if(ret=0)return1;else if(ret=SOCKET_ERROR)printf(send()failed:%dn,WSAGetLastError();return1;printf(Send%d bytesn,ret);ret=recv(sClient,szBuffer,80,0);/*if(ret=0)/Graceful closebreak;else if(ret=SOCKET_ERROR)printf(recv()failed:%dn,WSAGetLastError();break;*/szBufferret=0;printf(%sn,szBuffer);if(strncmp(szBuffer,125Transfering.,strlen(125Transfering.)=0)if(fpre=fopen(filename,w)=NULL)printf(open errer);return1;printf(bSendOnly=%dn,bSendOnly);while(!bSendOnly)/读取流并显示ret=recv(sClient,szBuffer,80,0);if(ret=0)/Graceful closereturn1;else if(ret=SOCKET_ERROR)printf(recv()failed:%dn,WSAGetLastError();return1;szBufferret=0;/printf(%s,szBuffer);if(strncmp(szBuffer,226Transfer,strlen(226Transfer)=0)break;if(strncmp(szBuffer,500Syntax error,strlen(500Syntax error)=0)break;fprintf(fpre,%s,szBuffer);printf(%sn,szBuffer);fclose(fpre);Return0;in tp utfun(SOCKET sClient,ch arfilen am e40)int ret;/inti;FILE*fpse;/char*filename;/char*MSG=get0me.txt;char szBuffer80,temp_buffer80;/sprintf(szMessage,get0,te.txt0);szMessage0=0;strcat(szMessage,put$);strcat(szMessage,filename);ret=send(sClient,szMessage,strlen(szMessage)+1,0);if(ret=0)return0;else if(ret=SOCKET_ERROR)printf(send()failed:%dn,WSAGetLastError();return1;/printf(Send%d bytesn,ret);/filename=me.txt;printf(filename=%sn,filename);if(fpse=fopen(filename,r)=NULL)printf(open errer);return1;elseprintf(The file%s found,ready totransfer.n,filename);/i=0;while(fgets(temp_buffer,80,fpse)!=NULL)sprintf(szBuffer,%s,temp_buffer);send(sClient,szBuffer,80,0);sprintf(szBuffer,226Transfer pleted.rn);ret=send(sClient,szBuffer,strlen(szBuffer),0);fclose(fpse);return0;in tp wdfun(SOCKET sClient)int ret;char*MSG=pwd$;char szBuffer160;strcpy(szMessage,MSG);ret=send(sClient,szMessage,strlen(szMessage),0);if(ret=0)return1;else if(ret=SOCKET_ERROR)printf(send()failed:%dn,WSAGetLastError();return1;printf(Send%d bytesn,ret);printf(bSendOnly=%dn,bSendOnly);while(!bSendOnly)/读取流并显示ret=recv(sClient,szBuffer,160,0);if(ret=0)/Graceful closereturn1;else if(ret=SOCKET_ERROR)printf(recv()failed:%dn,WSAGetLastError();return1;szBufferret=0;printf(%sn,szBuffer);if(strncmp(szBuffer,226Close,strlen(226Close)=0)break;if(strncmp(szBuffer,500Syntax error,strlen(500Syntax error)=0)break;return0;in tcdfun(SOCKET sClient,char pathname40)int ret;szMessage0=0;strcat(szMessage,cd$);strcat(szMessage,pathname);ret=send(sClient,szMessage,strlen(szMessage)+1,0);if(ret=0)return1;else if(ret=SOCKET_ERROR)printf(send()failed:%dn,WSAGetLastError();return1;printf(Send%d bytesn,ret);return0;int mdfun(SOCKET sClient,char pathname20)int ret;char szBuffer160;/char*MSG=md$;szMessage0=0;strcat(szMessage,md$);/strcat(szMessage,);strcat(szMessage,pathname);/strcpy(szMessage,MSG);ret=send(sClient,szMessage,strlen(szMessage)+1,0);if(ret=0)return1;else if(ret=SOCKET_ERROR)printf(send()failed:%dn,WSAGetLastError();return1;printf(Send%d bytesn,ret);while(!bSendOnly)/读取流并显示ret=recv(sClient,szBuffer,80,0);if(ret=0)/Graceful closereturn1;else if(ret=SOCKET_ERROR)printf(recv()failed:%dn,WSAGetLastError();return1;szBufferret=0;printf(%s,szBuffer);if(strncmp(szBuffer,226Close,strlen(226Close)=0)break;if(strncmp(szBuffer,500Syntax error,strlen(500Syntax error)=0)break;return0;intdelfun(SOCKET sClient,char name20)int ret;char szBuffer80;szMessage0=0;strcat(szMessage,del$);strcat(szMessage,name);ret=send(sClient,szMessage,strlen(szMessage)+1,0);if(ret=0)return1;else if(ret=SOCKET_ERROR)printf(send()failed:%dn,WSAGetLastError();return1;printf(Send%d bytesn,ret);while(!bSendOnly)ret=recv(sClient,szBuffer,80,0);if(ret=0)/Graceful closereturn1;else if(ret=SOCKET_ERROR)printf(recv()failed:%dn,WSAGetLastError();return1;szBufferret=0;if(strncmp(szBuffer,del ok,strlen(del ok)=0)printf(del%s okn,name);break;printf(%s,szBuffer);if(strncmp(szBuffer,500Syntax error,strlen(500Syntax error)=0)break;return0;intusafun()puts(-);puts(get取远方的一个文件);puts(put传给远方一个文件);puts(pwd显示远主当前目录);puts(dir列出远方当前目录);puts(md在远方新建文件夹);puts(cd改变远方当前目录);puts(?显示你提供的命令);puts(quit退出返回);return0;/int quit()2)服务器程序/*server.c*/#include#include#include#pragma ment(lib,ws2_32.lib)WSADATA wsd;char sbuffer80,rbuffer80;/send andreceive buffersint n,bytes;/counters SOCKET newsocket,ns_data;struct sockaddr_in remoteaddr;/remoteaddr_data;int port_connect=0;/port connectflag charpath80=;char order100=;/SOCKET s_data_port;int sy_error=1;/use forindicate Syntaxerror/server functionsint sdirfun(SOCKET newsocket);int sgetfun(SOCKET newsocket);int sputfun(SOCKET newsocket);int spwdfun(SOCKET newsocket);int scdfun(SOCKET newsocket);int smdfun(SOCKET newsocket);int sdelfun(SOCKETnewsocket);void HandleError(char*func);/server functionsend/MAIN intmain(int argc,char*argv)struct sockaddr_in localaddr;/local addressstructure SOCKETs;/s_data;/wele socketand welesocket fordata connection,and portconnection forconnecttoclient intaddr_inlen;/address lenghtvariable if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)WSACleanup();printf(WSAStartup failedn);memset(&localaddr,0,sizeof(localaddr);/clear localaddrs=socket(PF_INET,SOCK_STREAM,0);if(s0

温馨提示

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

评论

0/150

提交评论