发送方:
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
class Cl extends Frame implements ActionListener
{
TextArea ta=new TextArea(5,10);
TextField tf=new TextField(10);
Socket c;
double m;
int i=0;
int q=0;
static int n;
String ss="";
static char abc[];
DataInputStream in=null;
DataOutputStream out=null;
String s;
double m1;
public Cl()
{
super("发送方");
s=null;
setSize(250,250);
tf.addActionListener(this);
add("North",tf);
add("Center",ta);
addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});
show();
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==tf)
{
String sss=tf.getText();
abc=sss.toCharArray();
try
{
c=new Socket("200.200.202.58",8888);
in=new DataInputStream(c.getInputStream());
out=new DataOutputStream(c.getOutputStream());
while(true)
{
n=0;
m=Math.random()*100;
m1=Math.random()*100;
if((m1>=0)&&(m1<50))
{
q=1;
}
else
{
q=0;
}
ss=String.valueOf(abc[i]);
String ss1=String.valueOf(q);
ss1=ss1.concat(" ");
ss1=ss1.concat(ss);
ta.append("发送:"+ss1);
ta.append("\n");
if(m>20&&m<=100)
{
out.writeUTF(ss1);
ss1="";
}
System.out.println("启动超时计时器:");
for(int zz=0;zz<3;zz++)
{System.out.println(n++);
Thread.sleep(1000);
if(m>20&&m<=100)
{
break;
}
}
if(n==3)
{
ta.append("超时重发");
ta.append("\n");
continue;
}
while(true)
{
s=in.readUTF();
if(s.equals("ack"))
{
ta.append("发送正确继续发"+"\n");
i=i+1;
break;
}
if(s.equals("nak"))
{
ta.append("发送错误重新发"+"\n");
break;
}
}
if(i==abc.length){break;}
}
}
catch(InterruptedException e1){}
catch(IOException e2){}
}
}
}
public class fa
{
public static void main(String args[])
{
new Cl();
}
}
接收方:
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
class Se extends Frame
{
TextField tf=new TextField(10);
TextArea ta=new TextArea(5,10);
Socket c;
public Se()
{
super("接收方");
setSize(250,250);
ServerSocket sever=null;
Socket you=null;
String s=null;
DataOutputStream out=null;
DataInputStream in=null;
double m1,m2;
String s1,s2,s3;
s1="";s2="";s3="";
int i=0;
int q=0;
int n;
add("North",tf);
add("Center",ta);
addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});
show();
try
{
sever=new ServerSocket(8888);
you=sever.accept();
in=new DataInputStream(you.getInputStream());
out=new DataOutputStream(you.getOutputStream());
while(true)
{
s=in.readUTF();
m1=Math.random()*100;
m2=Math.random()*100;
if(m2>0&&m2<50)
{
q=1;
}
else
{
q=0;
}
char a[]=s.toCharArray();
if((m1>20&&m1<=100)&&((a[0]-'0')==q))
{
ta.append("收到:"+s);
ta.append("\n");
s2=a[2]+"";
s3=s3.concat(s2);
tf.setText(s3);
out.writeUTF("ack");
}
if(m1>=0&&m1<=20)
{
ta.append("CRC检测错误!");
ta.append("\n");
out.writeUTF("nak");
}
else if((a[0]-'0')!=q)
{
ta.append("序号不对应丢弃帧");
ta.append("\n");
out.writeUTF("nak");
}
}
}catch(IOException e1){}
}
}
public class jie
{
public static void main(String args[])
{
new Se();
}
}
分享到:
相关推荐
通过这个项目,你可以学习到如何在C语言环境中实现网络通信,理解停等式ARQ的工作流程,以及如何处理网络错误和异常情况。此外,它还提供了一个实践平台,让你能够调试和优化代码,提升你的网络编程技能。无论你是...
6. 计算机通信中常用的差错控制方式有检错重发ARQ(Automatic Repeat reQuest)方式,如停止-等待ARQ、滑动窗口ARQ等。 7. 物理层要解决比特同步问题,确保数据的正确传输。 8. Internet 中最广泛使用的数据链路层...
ARQ(自动重传请求)协议如停止等待ARQ、还回N帧ARQ和选择重发ARQ则提供了错误恢复机制。 11. **多路复用技术**:包括频分复用(FDM)、时分复用(TDM)、波分复用(WDM)、码分复用(CDMA)和空分复用(SDM),这些技术通过...
文件中提到的停止等待协议、连续ARQ协议等,都是解决信道利用率问题的典型方法。通过计算不同的协议下信道的利用率,可以得出最优化的数据传输策略。 3. CSMA/CD协议的最短帧长计算:载波侦听多路访问/碰撞检测...
【ARQ】(自动重传请求)是反馈差错控制的一种方法,常见的ARQ方案有停止-等待ARQ和Go-Back-N ARQ。流量控制方案则有滑动窗口和选择重传两种。数据链路控制协议,即链路控制协议,属于OSI参考模型中的数据链路层协议...
8. 计算机网络分类:可以从覆盖范围(局域网、城域网、广域网)、拓扑结构(总线型、环形、星形等)、访问控制机制等方面分类。 9. 主干网与本地接入:主干网是网络的核心,提供高速连接,而本地接入用于连接终端...
3. 流量控制:停止等待、滑动窗口等策略用于防止数据包的拥塞。 4. 差错检测与纠正:奇偶校验、CRC校验以及自动重传请求(ARQ)等方法确保数据的准确性。 5. 数据链路控制协议:例如高级数据链路控制(HDLC),提供数据...
ARQ(自动重传请求)机制包括停止等待ARQ、返回N帧ARQ和选择重发ARQ,用于错误恢复。 13. **数据透明性**:数据透明性意味着数据在传输过程中不受协议影响,任何比特模式都可以被正确解析。 14. **比特填充**:在...
4. 数据链路层:深入研究数据链路层的基本概念,包括停止等待协议、连续ARQ、选择重传ARQ和HDLC、PPP等,要求学生掌握基本协议的工作机制。 通过这些章节的学习,学生将具备分析和解决计算机网络问题的能力,同时对...
1. **计算机网络定义**:计算机网络是指通过通信设备和线路连接地理位置不同的多台计算机系统,通过网络软件(如协议、信息交换方式和操作系统)实现资源共享和信息交换。 2. **网络构成要素**:包括计算机、通信...
计算机网络是信息技术领域的重要组成部分,它涵盖了从硬件到软件的各种技术,用于实现设备之间的通信和数据交换。在准备计算机网络的期末考试时,理解和掌握以下几个关键知识点至关重要。 首先,了解计算机网络的...
课程涵盖停止等待协议、连续ARQ协议和选择重传协议,以及HDLC作为实例来说明数据链路层协议的工作方式。流量控制和差错控制是本章的重点,它们确保数据正确无误地传输,并避免网络拥堵。 第四章“局域网技术”中,...
17. **差错控制方法**:ARQ(自动反馈重发)包括停止等待和连续工作方式。 18. **局域网分类**:根据介质访问控制方法,局域网分为共享式和交换式,共享式又分为争用型和定时型,交换式的核心是交换机。 19. **...
- **计算机网络定义**:计算机网络是通过通信设备和通信线路连接起来的,实现数据交换、资源共享和信息传递的系统。 - **分类**:按照地理位置和作用范围,网络可以分为局域网(LAN)、城域网(MAN)和广域网(WAN...