模仿數(shù)據(jù)鏈路層停等協(xié)議_第1頁(yè)
模仿數(shù)據(jù)鏈路層停等協(xié)議_第2頁(yè)
模仿數(shù)據(jù)鏈路層停等協(xié)議_第3頁(yè)
模仿數(shù)據(jù)鏈路層停等協(xié)議_第4頁(yè)
模仿數(shù)據(jù)鏈路層停等協(xié)議_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

對(duì)于一些初學(xué)網(wǎng)絡(luò)的人,老師突然叫你編一個(gè)模擬停等協(xié)議的程序,可能很多人都會(huì)茫然,我也如此,但是通過(guò)幾天的努力還是基本完成了任務(wù),具體如下:此程序運(yùn)行在.NETFRAMEWORK4.0以上,編譯平臺(tái)VS2010;程序界面如下:具體怎樣設(shè)計(jì)取決與編程的人主要操作過(guò)程:方法1:先創(chuàng)建一個(gè)VisualStudio解決方案,再在里面添加兩個(gè)Windows窗口應(yīng)用程序作為發(fā)送方和接收方;方法2:直接創(chuàng)建兩個(gè)Windows窗口應(yīng)用程序作為發(fā)送方和接收方;程序代碼如下:有的控件名稱(chēng)被修改過(guò)的所以不要直接復(fù)制要先修改控件名稱(chēng)程序有點(diǎn)亂,有的代碼無(wú)用,但對(duì)程序沒(méi)有多大影響發(fā)送方源代碼:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Net.Sockets;//usingSystem.Net;//引用Socket套接字namespace發(fā)送方{publicpartialclassfmSender:Form{Socketsocket;//套接字實(shí)例stringIP;//保存主機(jī)ipintPort;//保存端口IPEndPointiep;intZhenCount;//保存分幀數(shù)privatestring[]ZuZhen()//組á¨|幀?函?¥數(shù)oy{try{//stringmessage="";intcount=0;intj=0;ZhenCount=Convert.ToInt32(txtCount.Text);if(txtMsg.Text.Length%ZhenCount==0){count=txtMsg.Text.Length/ZhenCount;}else{count=txtMsg.Text.Length/ZhenCount+1;}string[]msg=newstring[count];for(inti=0;i<txtMsg.Text.Length;i++){if(i==0){msg[j]+=txtMsg.Text[i];}elseif(i%ZhenCount==0){j++;msg[j]+=txtMsg.Text[i];}else{msg[j]+=txtMsg.Text[i];}}//按???幀?數(shù)oy分¤?出?來(lái)¤??的ì?字á?符¤?數(shù)oy組á¨|for(intk=1;k<=count;k++){if(k==count){msg[k-1]="DLESTX"+msg[k-1]+"DLEETX"+"0";//以°?0為a結(jié)¨¢束o?幀?}else{msg[k-1]="DLESTX"+msg[k-1]+"DLEETX"+k;}}//組á¨|幀?for(inti=0;i<msg.Length;i++){if(msg[i]=="DLE"){msg[i].Replace("DLE","DLEDLE");}//message+=msg[i]+"";}//returnmessage;returnmsg;}catch(Exceptionex){MessageBox.Show("組á¨|幀?出?錯(cuò)?¨a!ê?","系|ì統(tǒng)a3提?¨¢示o?",MessageBoxButtons.OK,MessageBoxIcon.Information);string[]str=newstring[]{ex.Message};returnstr;}}privatevoidBeginSend()//發(fā)¤?é送¨a函?¥數(shù)oy{string[]str=ZuZhen();rtbSendMsg.AppendText("發(fā)¤?é送¨a信?息?é:êo"+txtMsg.Text+""+DateTime.Now.ToString()+"\r\n");//下?為a傳??輸o?byte[]byteMessage;//出?現(xiàn)?異°¨?常?êfor(inti=0;i<str.Length;i++){socket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);IPAddressserverIp=IPAddress.Parse(IP);intserverPort=Convert.ToInt32(Port);iep=newIPEndPoint(serverIp,serverPort);socket.Connect(iep);byteMessage=Encoding.ASCII.GetBytes(str[i]);socket.Send(byteMessage);socket.Shutdown(SocketShutdown.Both);socket.Close();}}publicfmSender(){InitializeComponent();}privatevoidtextBox2_TextChanged(objectsender,EventArgse){IP=txtIp.Text;}privatevoidfmSender_Load(objectsender,EventArgse){txtPort.Text="80";IPAddress[]ip=Dns.GetHostAddresses(Dns.GetHostName());txtIp.Text=ip[0].ToString();IP=txtIp.Text;Port=Convert.ToInt32(txtPort.Text);//獲?取¨?本à?地ì?主??機(jī)¨2IPtxtCount.Text="2";//初?始o(jì)?幀?為a2}privatevoidbtnSend_Click(objectsender,EventArgse){try{BeginSend();txtMsg.Text="";}catch(Exceptionex){Console.WriteLine(ex.Message);}}privatevoidtxtPort_TextChanged(objectsender,EventArgse){Port=Convert.ToInt32(txtPort.Text);}privatevoidtxtCount_TextChanged(objectsender,EventArgse){ZhenCount=Convert.ToInt32(txtCount.Text);}privatevoidbutton1_Click(objectsender,EventArgse){rtbSendMsg.Clear();}}}接收方源代碼:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Net.Sockets;usingSystem.Net;usingSystem.Threading;//引用線程namespace接收方{publicpartialclassForm1:Form{Threadmythread;stringIP;intPort;Socketsocket;IPEndPointiep;stringMessage;publicdelegatevoidmydeleget(Socketsocket);mydelegetmy=null;publicdelegatevoiddeleget1(inti);publicdelegatevoiddeleget2(stringstr);deleget1del1=null;deleget2del2=null;SocketnewSocket;intj=0;privatestringFenZhen(refstringend)//分幀函數(shù){stringstr="";try{string[]msg=Message.Split(newChar[]{''});for(inti=0;i<msg.Length;i++){//richTextBox1.AppendText("第"+i+"幀:"+Zhen[i]+"\r\n");if(msg[i]=="DLEDLE"){msg[i].Replace("DLEDLE","DLE");}}str+=msg[2];end=msg[5];returnstr;}catch(Exceptionex){returnex.Message;}}//publicvoidGo(Socketsocket){inti=0;stringend1="-1";stringstr=null;stringsTime;stringmsg;byte[]byteMessage=newbyte[100];//存放接收到的信息try{while(true){/*newSocket.Receive(byteMessage);sTime=DateTime.Now.ToShortTimeString();msg=sTime+"-"+"信息來(lái)自:";Message=Encoding.Default.GetString(byteMessage).Trim(newchar[]{'\0'});//將接收到的信息轉(zhuǎn)化為字符串//msg+=newSocket.RemoteEndPoint.ToString()+""+FenZhen();if(richTextBox1.InvokeRequired){my=newmydeleget(Go);this.Invoke(my,newobject[]{socket});}else{richTextBox1.AppendText("第"+i+"幀:"+Message+"\r\n");}str+=FenZhen(refend1);*/while(end1!="0"){i++;newSocket=socket.Accept();socket.Listen(5);newSocket.Receive(byteMessage);sTime=DateTime.Now.ToShortTimeString();msg=sTime+"-"+"信息來(lái)自:";Message=Encoding.Default.GetString(byteMessage).Trim(newchar[]{'\0'});//將接收到的信息轉(zhuǎn)化為字符串//msg+=newSocket.RemoteEndPoint.ToString()+""+FenZhen();if(richTextBox1.InvokeRequired){//my=newmydeleget(Go);//this.Invoke(my,newobject[]{socket});del1=newdeleget1(f1);this.Invoke(del1,newobject[]{i});}else{richTextBox1.AppendText("第"+i+"幀:"+Message+"\r\n");}str+=FenZhen(refend1);}if(i!=0){if(richTextBox2.InvokeRequired){del2=newdeleget2(f2);this.Invoke(del2,newobject[]{str});}else{richTextBox2.AppendText("接收到的信息:"+str+""+DateTime.Now.ToString()+"\r\n");}}i=0;end1="-1";str="";}}catch(Exceptionex){Console.WriteLine(ex.Message);}}publicvoidf1(inti){richTextBox1.AppendText("第"+i+"幀:"+Message+"\r\n");}publicvoidf2(stringstr){richTextBox2.AppendText("接收到的信息:"+str+""+DateTime.Now.ToString()+"\r\n");}//publicvoidBeginListen()//開(kāi)始偵聽(tīng){Thread.Sleep(10);socket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);IPAddressip1=IPAddress.Parse(IP);iep=newIPEndPoint(ip1,Port);toolStripLabel1.Text=iep.ToString()+"正在偵聽(tīng)...";socket.Bind(iep);socket.Listen(5);Go(socket);}/*if(richTextBox1.InvokeRequired){my=newmydeleget(BeginListen);this.Invoke(my);}else{richTextBox2.Append

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論