2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 【计算机网络实验】停止等待ARQ算法模拟(Python实现)

【计算机网络实验】停止等待ARQ算法模拟(Python实现)

时间:2019-07-29 14:32:35

相关推荐

【计算机网络实验】停止等待ARQ算法模拟(Python实现)

目录

实验要求

解决思路

源码

sender

receiver

演示效果

实验要求

在实现了两个程序通信的前提下,模拟实现停止等待ARQ协议。

要求模拟实现:

正常数据帧的通信过程错误帧的通信过程数据帧的丢失的通信过程

解决思路

在实现两个进程通信的前提下,首先设置ack的初值为1,当第一次传输数据时,ack的值为1时,信息能够正常传输,否则信息传输失败。当第二次传输数据时候,ack值=0时,能正常传输数据,ack=1时传输失败。依次类推,第三次是ack=1时传输正确。没有实现CRC校验

源码

sender

import sockets = socket.socket()print("发送端创建成功")s.bind(('localhost', 8998))s.listen(3)print("等待连接")# s.settimeout(15.0)c, addr = s.accept()print("ip地址和端口号", addr)ack_expected = "1"ack = "0"while True:frame = input("输入要发送的信息")c.send(bytes(frame, 'utf-8'))while ack_expected != ack:try:c.settimeout(10.0)ack = c.recv(1024).decode()while ack_expected != ack:print(frame, "ack值不正确,验证失败,信息重新发送!")c.send(bytes(frame, 'utf-8'))ack = c.recv(1024).decode()except socket.timeout:while ack_expected != ack:print(frame, "超时10s,信息将重新发送!!")breakprint("验证通过,信息成功传输")stop_connection = input("输入'yes'以关闭连接,输入'no'以继续传输数据")if stop_connection == "yes":print("连接已关闭")c.close()s.close()breakif ack_expected == "0":ack_expected = "1"else:ack_expected = "0"

receiver

import socketc = socket.socket()print("接收端创建成功")c.connect(('localhost', 8998))rec_message = "end msg"while True:received_message = c.recv(1024).decode()print(f"传输信息是:{received_message}, 信息发送成功")print("等待验证。。。。。")if received_message != rec_message:ack = input("输入ack值: ")c.send(bytes(ack, 'utf-8'))

演示效果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。