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

下面是一些不错的回答

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

    1. 其实我已经说得很清楚了,其实就相当于文件传输的断点续传。你没有必要每次send成功后,去等待服务端发回一个信息(其实你也可以这么做,不过效率比较低),你可以这么做,如果send返回错误,你关掉连接后重新连接,等待对方发出已收到字节数的通知,然后,你再确定从何处开始发送,最后,如果你已经发完,也必须等待对方发出已经收完的通知,这样你可以确保你的文件的正确接收。
      我这里只是讲了大致过程,不过要点都讲了,具体的实施,我想并不困难.
    2. 我想,你所谓的send成功指的是接收方已经发出了确认信息,事实上,你没有必要知道这些信息,因为tcp层本身就有校验,确认机制,如果出现异常,send或者closesocket就会及时返回错误的,因为tcp底层有确认机制,在数据没有正确发出前,他是不可能把数据扔掉的,他会不断的发送,接受应答,直到数据正确接收,或者他认为已经出现异常时为止,如果他认为已经出现异常,在你调用send或者closesocket时会返回一个错误信息
      总之,tcp会保证数据正确有序的到达,但是,他不会也不可能去处理异常,它的这种保证也仅限于tcp层,因此,你的程序仍有必要在作一些确认

最新文章

  1. URL编码 utf-8 gb2312的区别
  2. JPA一对多循环引用的解决
  3. [转载][翻译] IoC 容器和 Dependency Injection 模式
  4. 【zTree】 zTree使用的 小例子
  5. Shell获取上一个月、星期的时间范围
  6. 10.Java设计模式 工厂模式,单例模式
  7. VIM正则表达式。
  8. PCL—低层次视觉—关键点检测(NARF)
  9. linux安装tomcat(转载:http://blog.csdn.net/zhuihunmiling/article/details/8977387)
  10. Ext JS学习第五天 Ext_window组件(二)
  11. hbase中Compaction的理解及RegionServer内存的使用,CacheBlock机制
  12. Linux显示计算次数的结果
  13. Py之Crawler:爬虫利用随机选取代理访问服务器的方法实现下载某网址上所有的图片到指定文件夹——Jason niu
  14. mysql基操
  15. React 中无用但可以装逼的知识
  16. 【Python语言】Python介绍
  17. THE DEFINITIVE GUIDE TO DEBUGGING JAVASCRIPT
  18. JAVA记录-SpringMVC+Mybatis几个核心注意的地方
  19. 初学的linux命令行
  20. 有关于Integer的一些小问题

热门文章

  1. Burpsuite—渗透测试神器
  2. Vue 拖拽组件 vuedraggable 、 vue-dragging 、awe-dnd
  3. Mysql: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
  4. 【转】SpringMVC框架实现后端向前端传数据
  5. C++Primer 5th Chap8 The IO Library
  6. JDBC(Java项目使用Oracle数据库)
  7. TCP三次握手和四次挥手及wireshark抓取
  8. Python之系统编程笔记
  9. go 结构的方法2
  10. JS 08表单操作_表单域