分槽ALOHA协议仿真实验中南大学.docx

上传人:b****6 文档编号:8912880 上传时间:2023-02-02 格式:DOCX 页数:11 大小:97.87KB
下载 相关 举报
分槽ALOHA协议仿真实验中南大学.docx_第1页
第1页 / 共11页
分槽ALOHA协议仿真实验中南大学.docx_第2页
第2页 / 共11页
分槽ALOHA协议仿真实验中南大学.docx_第3页
第3页 / 共11页
分槽ALOHA协议仿真实验中南大学.docx_第4页
第4页 / 共11页
分槽ALOHA协议仿真实验中南大学.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

分槽ALOHA协议仿真实验中南大学.docx

《分槽ALOHA协议仿真实验中南大学.docx》由会员分享,可在线阅读,更多相关《分槽ALOHA协议仿真实验中南大学.docx(11页珍藏版)》请在冰豆网上搜索。

分槽ALOHA协议仿真实验中南大学.docx

分槽ALOHA协议仿真实验中南大学

计算机网络实验报告

———分槽ALOHA协议仿真实验

 

班级:

姓名:

学号:

日期:

 

一、实验目的

Aloha是一个解决信道分配的简单而巧妙的方法。

本次实验写的是分槽aloha,就是将时间分成离散的间隔,每个数据包只能在时间槽的起点发送。

本次实验的目的是1.掌握VB、VC++、VS或JAVA等集成开发环境编写仿真程序的方法;2.理解并掌握分槽ALOHA协议原理。

二、实验内容与实现原理

实验内容:

编写仿真程序,对一定网络环境下MAC层的多路访问协议的分槽ALOHA协议进行实现。

通过仿真,学习协议采取的介质访问管理,包括介质分配和冲突解决机制,并对协议的性能与理论结果进行比较分析。

实验原理:

分槽Aloha的基本思想是把信道时间分成离散的时间槽,槽长为一个帧所需的发送时间。

每个站点只能在时槽开始时才允许发送。

其他过程与纯ALOHA协议相同。

分槽Aloha的信道效率比纯Aloha要高。

分槽Aloha的易受冲突区比纯Aloha小了一半。

它的重发策略是等待一段随机的时间,然后重发;如再次冲突,则再等待一段随机的时间,直到重发成功为止,但是发送的时间也是在每个时间槽的开始。

三、实验具体设计

代码包括六个类:

AlohaThread.java,jsp_1.java,jsq.java,SendPot.java,time.java,Main.java。

Main.java是主类。

主要是负责时间槽的初始化,以及多个线程的启动。

SendPot.java是发送站类。

里面包含了开始发送数据的时间,时间的间隔,以及成功发送完所有数据包的发送次数。

AlohaThread.java是实现了Thread接口的类。

他是Aloha的线程,run方法里面写了判断冲突的方法和数据包发送的计数方法。

每一个线程都是一个SendPot的发送过程。

sq.java也是实现了Thread接口的类。

他是一个计数器,每隔20秒加一,是用来计算现在已经到了第几个时间槽的。

关键代码说明

a、时间槽的计数,每隔20ms加一

while(true){

try{

N=N+1;

Thread.sleep(20);

}catch(InterruptedExceptione){

e.printStackTrace();

}

}

b、发送时间以及间隔时间归并到时间槽的开始

publiclonggetStartT(){

returnstart/20+1;

}

publiclonggetDt(){

returnd/20+1;

}

四、实验结果

……

因实验结果过长,只选取部分内容。

五、实验设备与实验环境

Windows操作系统,JDK1.7,使用的软件为eclipse。

六、实验总结

在本次实验的过程中,我觉得我不仅学到了关于Aloha的知识,也学到了对数据的处理以及测试程序的知识。

这次的实验让我对分槽Aloha有了更加深刻的了解,同时也更加熟练掌握了JAVA程序设计语言的运用。

七、源代码:

packageAloha;

importjava.util.ArrayList;

 

publicclassMain{

publicstaticvoidmain(String[]args){

int[]a=newint[10000];

for(inti=0;i<100000;i++){

timet=newtime();

t.setN(i);

t.setCount(0);

}

for(inti=0;i

a[i]=0;

}

SendPotsp1=newSendPot

(1);

SendPotsp2=newSendPot

(2);

SendPotsp3=newSendPot(3);

SendPotsp4=newSendPot(4);

SendPotsp5=newSendPot(5);

SendPotsp6=newSendPot(6);

jsp_1j=newjsp_1();

j.start();

AlohaThreadat1=newAlohaThread(sp1,j,a);

AlohaThreadat2=newAlohaThread(sp2,j,a);

AlohaThreadat3=newAlohaThread(sp3,j,a);

AlohaThreadat4=newAlohaThread(sp4,j,a);

AlohaThreadat5=newAlohaThread(sp5,j,a);

AlohaThreadat6=newAlohaThread(sp6,j,a);

at1.start();

at2.start();

at3.start();

at4.start();

at5.start();

at6.start();

 

}

}

packageAloha;

importjava.util.Random;

publicclassAlohaThreadextendsThread{

privateSendPotsp;

privateRandomr=newRandom();

privatelongtemp;

privatejsp_1j;

privateint[]a;

publicAlohaThread(SendPotsp,jsp_1j,int[]a){

this.sp=sp;

this.j=j;

this.a=a;

}

publicvoidrun(){

try{

Thread.sleep(sp.getStart());

}catch(InterruptedExceptione1){

e1.printStackTrace();

}

for(inti=0;i<100;i++){

a[j.getN()]=a[j.getN()]+1;

try{

Thread.sleep

(1);

//冲突

while(a[j.getN()]>1){

temp=r.nextInt(5)+1;

Thread.sleep(temp*20);

System.out.println(sp.getNum()+"冲突");

}

System.out.println("发送成功:

第"+sp.getNum()+"号第"+i+"个数据包~");

Thread.sleep(sp.getD());

}catch(Exceptione){

}

}

}

}

packageAloha;

publicclassjsp_1extendsThread{

privateintN;

publicvoidrun(){

while(true){

try{

N=N+1;

Thread.sleep(20);

}catch(InterruptedExceptione){

e.printStackTrace();

}

}

}

publicintgetN(){

returnN;

}

}

packageAloha;

publicclassjsqextendsThread{

privatelongt;

publicvoidrun(){

while(true){

try{

t=t+1;

Thread.sleep

(1);

}catch(InterruptedExceptione){

e.printStackTrace();

}

}

}

publiclonggetT(){

returnt;

}

}

packageAloha;

importjava.util.Random;

publicclassSendPot{

privateRandomr=newRandom();

privateintNum;

//开始发送时间

privatelongstart;

//时间间隔

privatelongd;

publicSendPot(intNum){

this.Num=Num;

start=r.nextInt(1000);

d=r.nextInt(30)+20;

}

publicintgetNum(){

returnNum;

}

publiclonggetStart(){

return(start/20+1)*20;

}

publiclonggetD(){

return(d/20+1)*20;

}

publiclonggetStartT(){

returnstart/20+1;

}

publiclonggetDt(){

returnd/20+1;

}

}

packageAloha;

publicclasstime{

//第N个时槽

privateintN;

//需要发送的数目

privateintcount;

publicintgetN(){

returnN;

}

publicvoidsetN(intn){

N=n;

}

publicintgetCount(){

returncount;

}

publicvoidsetCount(intcount){

this.count=count;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1