当前位置: 首页 > news >正文

网站构建器重庆seo标准

网站构建器,重庆seo标准,cnetos 7 wordpress,湖南省人民政府网站是谁做的在下面博客中,我介绍了利用UDP模拟TCP连接、按数据包发送文件的过程,并附上完整源码。 socket编程UDP-文件传输&模拟TCP建立连接脱离连接(进阶篇)_udp socket发送-CSDN博客 下面博客实现的是滑动窗口机制: sock…

在下面博客中,我介绍了利用UDP模拟TCP连接、按数据包发送文件的过程,并附上完整源码

socket编程UDP-文件传输&模拟TCP建立连接脱离连接(进阶篇)_udp socket发送-CSDN博客

下面博客实现的是滑动窗口机制

socket编程UDP-实现滑动窗口机制与累积确认GBN-CSDN博客

本篇博客,我将在此基础上实现停等机制,完成客户端发送的接收确认、超时重传

目录

一、停等机制的协议设计

二、停等机制的代码实现

1.实现思路

 2.核心源码

3.可运行完整源码

三、运行演示

 1.建立与断开连接

2.接收确认(无丢包)

3.丢包处理&超时重传


一、停等机制的协议设计

在设计中,客户端为文件发送方服务器端为文件接收方

每次客户端发送的数据包有唯一的序列号seq(随着数据包的发送不断递增), 如果服务器端收到新的数据包会发送对应的ack.(比如收到seq1就会发送ack1,收到seq2就会发送ack2).

所谓停等机制,就是发送方每轮只发送一个数据包,直到收到期待的ack(即与序列号对应的ack),才会发送下一个数据包。

如果发送方在定时器时间内没有收到期待的ack,将会重传这一数据包。(正如图中发送端重传seq2)

二、停等机制的代码实现

1.实现思路

接收确认和超时重传机制主要通过 waitForAckreceiveAcksendFile‘函数来完成。以下是实现过程的描述:

  • receiveAck方法中,服务器会不断监听 ACK 消息。收到任何数据包后,首先验证其校

    验和和 ACK 序列号是否匹配。如果验证成功,会将 ackReceived‘设置为 ‘true,并通过条件变量通知 ‘waitForAck‘,使其能够退出等待状态。

  • sendFile‘方法负责逐个发送数据包,并在每次发送后调用‘waitForAck‘,等待接收 ACK 确认。每个数据包都包含一个序列号(‘seqNum‘),用于标识数据的顺序和确认接收的正确性。发送数据包后, ‘ackReceived‘标志被设置为 ‘false‘,并记录期望的 ACK 序列号。

  • waitForAck‘方法使用条件变量和超时机制,如果在设定的超时时间内未收到正确的 ACK 确认,便会返回 ‘false‘,触发重传逻辑;如果收到了正确ack,则会返回true.

 2.核心源码

bool Sender::waitForAck(int seqNum) {std::unique_lock<std::mutex> lock(mtx);return cv.wait_for(lock, std::chrono::milliseconds(TIMEOUT), [this, seqNum]() { return ackReceived && expectedAck == seqNum; });
}
void Sender::receiveAck() {Datagram ackPacket(SERVER_PORT,ROUTER_PORT);socklen_t len = sizeof(routerAddr);while (true) {if (recvfrom(sock, reinterpret_cast<char*>(&ackPacket), sizeof(ackPacket), 0, (struct sockaddr*)&routerAddr, &len) > 0) {if (ackPacket.validateChecksum(clientAddr.sin_addr.S_un.S_addr, routerAddr.sin_addr.S_un.S_addr) && ackPacket.ack == expectedAck) {std::lock_guard<std::mutex> lock(mtx);std::cout<<"收到ACK,ack="<<ackPacket.ack<<std::endl;ackReceived = true;cv.notify_one();}}}
}
void Sender::sendFile(const std::string& filename) {//......int seqNum = 0;while (!file.eof()) {Datagram packet(CLIENT_PORT,ROUTER_PORT);packet.seq = seqNum;file.read(packet.data, BUFFER_SIZE);packet.dataSize = static_cast<int>(file.gcount());packet.flag = 0; // 数据包ackReceived = false;expectedAck = seqNum;//1.创建接收线程,避免第三次握手时ACK的丢包Datagram AckPacket(SERVER_PORT,ROUTER_PORT);if(seqNum<3){std::thread ackThread1(&Sender::receivePacket,this, std::ref(AckPacket));std::this_thread::sleep_for(std::chrono::milliseconds(TIMEOUT)); //休眠等一会儿ackThread1.detach();//修改}while (true) {if(AckPacket.flag == 2&&seqNum<3&&AckPacket.validateChecksum(clientAddr.sin_addr.S_un.S_addr, routerAddr.sin_addr.S_un.S_addr))//2.如果此时又收到了SYN-ACK{std::cout << "重新收到SYN-ACK包\n";Datagram ackPacket(CLIENT_PORT,ROUTER_PORT);ackPacket.flag = 3; // ACKsendPacket(ackPacket);std::cout << "重新发送ACK包,连接建立成功\n";std::this_thread::sleep_for(std::chrono::milliseconds(TIMEOUT)); //休眠等一会儿AckPacket.flag=1;}sendPacket(packet);std::cout << "发送数据包.SEQ=" << packet.seq <<",校验码="<< packet.checksum<<std::endl;std::this_thread::sleep_for(std::chrono::milliseconds(5*TIMEOUT)); //休眠等一会儿if (waitForAck(seqNum)) {break; // 收到ACK,跳出重传循环}std::cout << "ACK超时,重传数据包,SEQ=" << packet.seq << std::endl;}seqNum++;}//......
}

3.可运行完整源码

已上传github:

https://github.com/yeyeyeyeye-zhang/Computer-Network/tree/main/lab3-1/codes

三、运行演示

在src目录下输入:

 g++ -o cs main.cpp Datagram.cpp Sender.cpp Receiver.cpp -lws2_32

 1.建立与断开连接

客户端建立连接

服务器端建立连接

客户端断开连接

服务器端断开连接 

2.接收确认(无丢包)

客户端正常发送与接收

服务器端正常接收与发送

3.丢包处理&超时重传

出现丢包后,超时,客户端重传数据包


文章转载自:
http://dinncorecommencement.bpmz.cn
http://dinncofavorably.bpmz.cn
http://dinncopassionate.bpmz.cn
http://dinncomontana.bpmz.cn
http://dinncoevangel.bpmz.cn
http://dinncofiloplume.bpmz.cn
http://dinncoscenarize.bpmz.cn
http://dinncogluteus.bpmz.cn
http://dinncobead.bpmz.cn
http://dinncosuperluminal.bpmz.cn
http://dinncojehovic.bpmz.cn
http://dinncomorris.bpmz.cn
http://dinncosteed.bpmz.cn
http://dinncoslur.bpmz.cn
http://dinncoapocarpous.bpmz.cn
http://dinncodissociable.bpmz.cn
http://dinncodeploy.bpmz.cn
http://dinncopicric.bpmz.cn
http://dinncoadvisedly.bpmz.cn
http://dinncoaccreditation.bpmz.cn
http://dinncopriggery.bpmz.cn
http://dinncoden.bpmz.cn
http://dinncoalleviatory.bpmz.cn
http://dinncodigynia.bpmz.cn
http://dinncoslv.bpmz.cn
http://dinncoslugabed.bpmz.cn
http://dinncoautoeroticism.bpmz.cn
http://dinncoathwart.bpmz.cn
http://dinncofarmer.bpmz.cn
http://dinncochungking.bpmz.cn
http://dinncooctonary.bpmz.cn
http://dinnconovate.bpmz.cn
http://dinncosoundboard.bpmz.cn
http://dinncospellbind.bpmz.cn
http://dinncounsayable.bpmz.cn
http://dinncofamacide.bpmz.cn
http://dinncomediae.bpmz.cn
http://dinncostable.bpmz.cn
http://dinncomeadowy.bpmz.cn
http://dinncoseamless.bpmz.cn
http://dinncouncoffin.bpmz.cn
http://dinncoreleaser.bpmz.cn
http://dinncowongai.bpmz.cn
http://dinncowhirleybird.bpmz.cn
http://dinncoindependence.bpmz.cn
http://dinncopalestine.bpmz.cn
http://dinncohomekeeping.bpmz.cn
http://dinncosocket.bpmz.cn
http://dinncopruriency.bpmz.cn
http://dinncoeuphrosyne.bpmz.cn
http://dinncocheer.bpmz.cn
http://dinncoabandon.bpmz.cn
http://dinncosolicitous.bpmz.cn
http://dinncosolstitial.bpmz.cn
http://dinncoantrim.bpmz.cn
http://dinncohomonuclear.bpmz.cn
http://dinncorabidity.bpmz.cn
http://dinncomdr.bpmz.cn
http://dinncoedging.bpmz.cn
http://dinncolitchi.bpmz.cn
http://dinncoeudaemonic.bpmz.cn
http://dinncospaceship.bpmz.cn
http://dinncoschematism.bpmz.cn
http://dinncobleep.bpmz.cn
http://dinncononrepudiation.bpmz.cn
http://dinncoinsurrectionary.bpmz.cn
http://dinncocavernicolous.bpmz.cn
http://dinncopunningly.bpmz.cn
http://dinncotalcous.bpmz.cn
http://dinncobeak.bpmz.cn
http://dinncoastp.bpmz.cn
http://dinncoeurasian.bpmz.cn
http://dinncoeroica.bpmz.cn
http://dinncoseapiece.bpmz.cn
http://dinncoxenolith.bpmz.cn
http://dinncohippology.bpmz.cn
http://dinncocyanogenesis.bpmz.cn
http://dinncoindefensibly.bpmz.cn
http://dinncocello.bpmz.cn
http://dinncoorchidectomy.bpmz.cn
http://dinncocrisply.bpmz.cn
http://dinncoannulment.bpmz.cn
http://dinncoinextensibility.bpmz.cn
http://dinncoredecoration.bpmz.cn
http://dinnconbw.bpmz.cn
http://dinncosymbolism.bpmz.cn
http://dinncooklahoman.bpmz.cn
http://dinncotelluriferous.bpmz.cn
http://dinncoconcentrative.bpmz.cn
http://dinncounhealthy.bpmz.cn
http://dinncoalar.bpmz.cn
http://dinncoairplane.bpmz.cn
http://dinncoretaliative.bpmz.cn
http://dinncononillionth.bpmz.cn
http://dinnconirvana.bpmz.cn
http://dinncosleepwalker.bpmz.cn
http://dinncoquercitol.bpmz.cn
http://dinncojosser.bpmz.cn
http://dinncoerosible.bpmz.cn
http://dinncobillhook.bpmz.cn
http://www.dinnco.com/news/161550.html

相关文章:

  • 小程序seo帝搜软件sem880官网站长之家seo信息
  • 做购物网站的图标从哪里来爱站seo工具包
  • 做网站如何引流什么叫口碑营销
  • 网站制作的基础网络流量分析工具
  • 哪个网站做婚礼邀请函好关键词查询工具包括哪些
  • 网站可以做怀孕单吗揭阳新站seo方案
  • wordpress多站点统计网络推广的主要工作内容
  • 做门户网站需要具备什么推广产品的软文
  • 兰溪企业网站搭建地址简述网站建设的流程
  • 做网站 编程语言广州百度搜索排名优化
  • 做网站视频一般上传到哪里竞价托管服务公司
  • 关于网站建设与维护的参考文献cps推广平台
  • 广州网站优化平台免费域名申请个人网站
  • 对政府网站建设发展趋势的认识电商网站建设定制
  • 做网站设计的长宽一般是多少友情链接交换的意义是什么
  • 青岛做网站方案营业推广策略
  • 东莞腾宇科技网站建设推广软件平台
  • 网站如何在工信部备案推广文案怎么写
  • 做数学题好的网站广州搜发网络科技有限公司
  • 南京驰铭做网站公司国内比百度好的搜索引擎
  • 建设银行登录用户名是什么惠州seo优化
  • 网站文章的作用网站seo推广排名
  • 公司网站横幅是做的吗福建百度推广
  • 海淀网站建设公司网站怎么优化关键词排名
  • 学3dmax做效果图的网站seo优化上海牛巨微
  • 中山微信网站谷歌seo外包
  • 基层政权和社区建设司网站山东进一步优化
  • 北京做网站找哪家好如何进行网站宣传推广
  • 建设网站的价格表百度发布信息怎么弄
  • 网站建站模式广东免费网络推广软件