zoukankan      html  css  js  c++  java
  • 关于tcp send的再次思考

    最近在用socket时,再次思考了一下如何确保对方收到消息的问题

    下面是一些不错的回答

    https://www.zhihu.com/question/25016042/answer/73785738

      1. 其实我已经说得很清楚了,其实就相当于文件传输的断点续传。你没有必要每次send成功后,去等待服务端发回一个信息(其实你也可以这么做,不过效率比较低),你可以这么做,如果send返回错误,你关掉连接后重新连接,等待对方发出已收到字节数的通知,然后,你再确定从何处开始发送,最后,如果你已经发完,也必须等待对方发出已经收完的通知,这样你可以确保你的文件的正确接收。
        我这里只是讲了大致过程,不过要点都讲了,具体的实施,我想并不困难.
          
      2.   

        我想,你所谓的send成功指的是接收方已经发出了确认信息,事实上,你没有必要知道这些信息,因为tcp层本身就有校验,确认机制,如果出现异常,send或者closesocket就会及时返回错误的,因为tcp底层有确认机制,在数据没有正确发出前,他是不可能把数据扔掉的,他会不断的发送,接受应答,直到数据正确接收,或者他认为已经出现异常时为止,如果他认为已经出现异常,在你调用send或者closesocket时会返回一个错误信息
        总之,tcp会保证数据正确有序的到达,但是,他不会也不可能去处理异常,它的这种保证也仅限于tcp层,因此,你的程序仍有必要在作一些确认
  • 相关阅读:
    sparql学习sparql示例、dbpedia在线验证
    中国绿卡
    逾期率的水有多深,你知道吗?
    ICO和区块链区别
    What are the benefits to using anonymous functions instead of named functions for callbacks and parameters in JavaScript event code?
    Link static data in sql source control
    sql data compare
    viewbag
    多态的实际使用
    win10 sedlauncher.exe占用cpu处理
  • 原文地址:https://www.cnblogs.com/wangshaowei/p/11822784.html
Copyright © 2011-2022 走看看