关于dotnet的异步socket通信的问题

原创 2006年03月21日 14:00:00
关键词:dotnet, socket, asynchronous 异步, tcp

在上次参加趋势的百万程序大赛的时候,我负责的socket通讯部分出了一件怪事:当大量传输数据包的大小在一定大小以上(一般是1500到2000)的时候,会在一定时间之后出现数据包的解包错误。
传输方式是TCP, 传输的是序列化后的对象,传输格式是 byte[4]作为对象长度+序列化后的对象本身,处理方法是 接受方读取对象长度后建立对应大小的byte[]一次读清数据包。
在小数据包时没有任何问题,但是在传输大到一定程度后的一段时间后(当时的情况是大约10秒不到)会出现无法 反序列化,即传输错误。
原本我们调试的基准是 基于TCP的传输是可靠的,所以一直在检查程序的逻辑错误。但是最后发现,问题在于,回调函数 ReceiveDone() 在缓冲区并未完全读满以后就被调用了,导致最后读取的一部分为 0,数据反序列化失败。
问题是:缓冲区的控制 显然是交给dotnet的,所以基本肯定是dotnet的问题。感觉上似乎是写缓冲区的速度没有跟上传输的速度,不过不大可能啊……
发生的环境:局域网,机器配置服务器(接收端)是64位机(Athlon64),发送端32位机。不知道和这又没有关系

但是这几天我试图重现这个问题,发现本机上不太好重现。可能是处理速度够快。

先把这个问题放在这里,如果有人碰到了同样的问题,还请多多交流。
感谢Gas确定了问题的所在。

UPDATE: 我不知道是不是我当时犯了一个糊涂的错误——没有用循环来读取recv的内容,而且认为recv肯定是要多少就读了多少……
不过我现在不会反这个错误了……

Android App开发基础篇—Socket通信

Android App开发基础篇—Socket通信 前言:Android 开发中的Socket通信主要用到了Java API中java.net中的两个类Socket和SocketServer,分别用来...
  • lyklykkk
  • lyklykkk
  • 2017年06月27日 09:49
  • 258

关于产品推荐的10个问题

许多零售商使用自动的产品推荐技术来增加他们的销售额和转化率。这些推荐的物品通常是商业站点上动态生成的,通常基于特定客户或一组客户的购买习惯。 Strands Recommender 是一个领先的...
  • ozhaohuafei
  • ozhaohuafei
  • 2014年07月05日 19:58
  • 1792

SOCKET通信中多线程编程的性能优化问题

SOCKET网络编程,多线程场景下的性能表现与参数选择
  • success_by_choice
  • success_by_choice
  • 2017年04月12日 16:19
  • 422

关于AS3代码异步执行问题的个人常用解决办法

因AS3中代码是异步执行的,有时候经常会遇到一个函数还没执行完就开始执行下一个函数的问题,比如一个函数执行读取XML数据的操作,暂命名为:XmlInfoReader, 一个函数用来处理XML数据,暂命...
  • kisstherain
  • kisstherain
  • 2012年02月07日 15:37
  • 1049

异步Socket通信

异步Socket通信By John McTainsh  From: http://www.codeproject.com/csharp/socketsincs.aspTranslate by: Hil...
  • hillfree
  • hillfree
  • 2002年09月25日 10:33
  • 7341

关于读书的几个问题

读书,并不是穷酸秀才秀穷秀酸的时候才出来卖弄于人的。笛卡儿说:“读一切好书,就是和许多高尚的人谈话。”读书中的愉悦和享受,体现在精神、境界上的享受和在慎思方面的提升,自不是网络冲浪中能够获得的。“书中...
  • sxhelijian
  • sxhelijian
  • 2013年09月30日 08:19
  • 4223

java server 多client异步socket通信demo

本demo打包下载,请点击这里 本demo主要用java实现了服务器监听多客户端登录,并实现了客户端与服务器的异步socket通信,通信过程采用了消息队列缓冲机制(生产者消费者模式)。 登录过程是...
  • kingodcool
  • kingodcool
  • 2015年05月28日 10:52
  • 1329

网络通信——socket(TCP/IP).Http,同步和异步的区别

1首先说下同步和异步的区别吧 同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事 (比如 普通B/S模式) 异步:请求通过事件触发->服务器处理(这是...
  • u013424496
  • u013424496
  • 2016年06月24日 11:06
  • 4519

socket通信之可靠和不可靠的原理

TCP可靠,UDP不可靠的实现 每个TCP socket在内核中都有一个发送缓冲区和一个接收缓冲区,TCP的全双工的工作模式以及TCP的滑动窗口便是依赖于这两个独立的buffer以...
  • richerg85
  • richerg85
  • 2014年02月23日 23:42
  • 4191

基于Socket的多线程和异步非阻塞模式编程

      刚开始接触socket的编程的时候,遇到了很多的问题,费了很大劲搞懂。其实往往都是一些比较基本的知识,但是都是很重要的,只要对其熟练的掌握后,相信对基于网络的编程会有很大的提高,呵呵。  ...
  • Laiger001
  • Laiger001
  • 2009年10月09日 15:50
  • 3812
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于dotnet的异步socket通信的问题
举报原因:
原因补充:

(最多只允许输入30个字)