socket接收数据不全解决方案
2013-10-30 14:53
183 查看
Byte[] by1 = new Byte[10]; int sum = 0; string sumstr = ""; do { int getby1 = socket1.Receive(by1, by1.Length, 0); sum += getby1; sumstr += Encoding.UTF8.GetString(by1, 0, getby1); } while (sum <= 10); int leng = Convert.ToInt32(sumstr.Substring(0,10)); Byte[] bytesReceived1 = new Byte[leng]; socket1.ReceiveBufferSize = leng; string recvStr = sumstr.Substring(10); int lengOK = recvStr.Length; do { int byy = socket1.Receive(bytesReceived1); lengOK += byy; recvStr += Encoding.UTF8.GetString(bytesReceived1, 0, byy); } while (leng - lengOK > 0);
//SOCKET读取长数据就像在吃一根冰棒, 咬第一口也就是do循环的第一次 尽管嘴巴(bytesReceived1数组的长度)足以容纳整根雪糕(完
//整待接收数据),但是(咬一口)读取的数据byy(咬一口到嘴里的)数据只有1 /3 或1 /4 或更少, 第二次读取会紧跟第一次读取的末尾 //进行读取,你吃一口雪糕后咬二口的时候不用担心吃进嘴巴的第一口还在冰棒上,就这样循环到将整根冰棒吃完!
相关文章推荐
- Google Chrome开发者工具-移动仿真:设备取向和CSS媒体类型
- sharepoint无法到搜索人员
- C++ STL中迭代器失效的问题
- Selenium+TestNG+Jenkins 框架图形化UML表示
- Android中的传感器
- 输入一个整数,使用递归方法实现反向输出
- VC打开制定文件夹
- 为什么我的VS2008不报错
- android4.0.3去掉底部状态栏statusbar,全屏显示示例代码
- php中生成随机密码的自定义函数代码
- A与B 之间最长的子串
- EF调用存储过程遇到的问题
- uva 1328 - Period
- 【原】Activity的LaunchMode和taskAffinity
- Asp.Net alert弹出提示信息的若干种方法
- jeffy-vim配置Vim编辑器
- hadoop,hbase,hive安装全记录(转)
- std::function 和 std::bind
- java内存查看与分析
- TQ2440在linux下的LED驱动程序