- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机网络课程设计报告_中国地质大学_武汉
计算机网络课程设计报告
学院: 计算机学院
专业:计算机科学与技术
教师:
班级:
姓名:
学号:
源码在CSDN上有
目 录
题目一 ……………………………………………………… 02
题目二 ……………………………………………………… 07
题目三 ……………………………………………………… 17
总结 ……………………………………………………… 24
题目一:P105:3-07,为该数据添加CRC码,并验证他的正确性,改动CRC码最后一位,验证他的正确性。
题目介绍:
循环冗余检验(CRC)的原理是在发送端,先把数据划分为组,假定每组k个比特。现假定待传送的数据M。CRC运算就是在数据M后面添加供差错检测用的n位冗余码,然后构成一个帧发出去,一共发送(k + n)位。在接收端把接收到的数据以帧为单位进行CRC检验:把收到的的每一个帧都除以同样的除数(模2运算),然后检测余数,如果传输过程中没有差错,得到的余数肯定为0,如果出现误码,那么余数等于0的概率是非常小的。
算法说明:
求余数的算法采用逐位比较的方法,每次从被除数(CString类型的字符)的前段取出与除数相同的位数,进行逐位比较,如果相同结果则为0,不同结果则为1,然后得到一个比较后的结果。删除被除数前被取出的字段,把比较后的结果连接到被除数前。此时的被除数位数不变,前边至少有一位为0,然后利用循环控制,把被除数前端的0位删除。然后重复之前的步骤,直到被除数的位数小于除数的位数,此时的剩下的被除数就是余数。然后检测余数的位数,若位数比除数的位数减1还要小,则在余数前端补0,使余数的位数等于除数的位数减1。校验算法与求余数的算法类似,根据接收到的数据和预先商定的除数,进行计算,求出余数,若余数为0,则传输的数据无误,若余数不为0,则传输过程中产生了错误。算法流程图如下所示:
程序流程图:
运行截图:
计算冗余校验码:
改变接收序列
主要代码实现:
1. 计算冗余码函数如下:
void CMy01Dlg::OnBtnCount()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CString num1 = m_num1;//被除数
CString num2 = m_num2;//除数
CString send = num1;
CString rcv;
CString r;//余数
CString temp = "";
CString pre;
int l1,l2; //被除数,除数的长度
l1 = num1.GetLength();//获取被除数长度
l2 = num2.GetLength();//获取除数长度
//被除数后添加n-1个0
for (int i = 0;i < l2-1;i++)
{
num1 = num1 + "0";
}
//按位与运算
while(1)
{
pre = num1.Left(l2);
for (i = 0;i < l2;i++)
{
if (pre.Mid(i,1) == num2.Mid(i,1))
temp = temp + "0";
if (pre.Mid(i,1) != num2.Mid(i,1))
temp = temp + "1";
}
num1.Delete(0,l2);//删除被除数前的数据
num1 = temp + num1;//将结果加在被除数前
//去除被除数前边的为0位
while(num1.Left(1) == "0")
{
num1.Delete(0,1);
}
l1 = num1.GetLength();//获取被除数长度
if(l1 <= l2-1)
break;
else
temp = "";
}
r = num1;//余数
//判断余数位数,等于除数位数减1
while(r.GetLength() != l2-1)
{
r = "0"+r;
}
m_r = r;
send = send + r;//发送序列
rcv = send;//接收序列
m_send = send;
m_rcv = rcv;
//被除数和除数置为不可编辑
文档评论(0)