停止等待协议:
图片来自课件:《计算机网络(第六版)》课件制作人:谢希仁。
代码:
只实现了计算校验码、CRC校验无差错情况和CRC校验有差错情况的模拟。
Tools:
public class Tools {
/**
* CRC和计算校验码
* @param data 数据
* @param generatorPolynomial 生成多项式
* @param checkCode 校验码
* @return 当校验码为空时,用生成多项式计算校验码,当校验码不为空时,返回余数。
*/
public static String isRightData(String data,String generatorPolynomial,String checkCode){
//给data加上4(生成多项式长度减一)个零 11010110110000
if(checkCode==null){
for(int i=0;i<generatorPolynomial.length()-1;i++){
data+="0";
}
}else {
//校验码不为空,给数据加上校验码,
data+=checkCode;
}
System.out.println("data:"+data);
String res=data.substring(0,generatorPolynomial.length());//11010
System.out.println("data的前五位"+res);
data=data.substring(generatorPolynomial.length());//data去掉前五位数 :110110000
//当data的长度为0时结束
while(data.length()!=0){
//按位异或
res=getRes(res,generatorPolynomial);
System.out.println("异或的结果为:"+res);
//让res的长度与 生成多项式的长度相同
while (res.length()<generatorPolynomial.length()){
if(data.length()!=0){
//当res的长度为0时,0不往res上加 ,让res的第一为始终为1
if(data.charAt(0)=='0'&&res.length()