SOCKET的一些注意事项
2015-09-10 15:25
267 查看
1. 如果采用同步处理,其实,是可以多次接受数据的,
MemoryStream ms = new MemoryStream(); while (true) { Console.WriteLine("Available :{0}", socket.Available); int receivedBytesLength = socket.Receive(receivedBytes, 0, receivedBytes.Length, SocketFlags.None); if (receivedBytesLength > 0) { ms.Write(receivedBytes, 0, receivedBytesLength); } else { break; } } 最后 ms.ToArray() ,就能得到相应的数组了
recevieBytes是个定义好的固定大小的byte数组
2. IOCP模式
基本上都是微软官方的DEMO改的,在processreceive处理里面,有异步send的过程,然后,在processsend的处理里,执行成功了,会再次调用receiveasync()方法,最终会在processreceive方法里,
执行CloseSocket()的。
这里感觉奇怪的是,如果我直接在send里执行关闭,最终还是有 time_wait残留的(这个30秒-4分钟之内,一定会小时的,所以,也不算是影响太大),但是如果 receiveasync一次之后,执行的关闭,就没有了
,不知道最终的原理是什么意思,需要好好的研究一下哈,如果有明白的同学,也请大家分享一下哈!
MemoryStream ms = new MemoryStream(); while (true) { Console.WriteLine("Available :{0}", socket.Available); int receivedBytesLength = socket.Receive(receivedBytes, 0, receivedBytes.Length, SocketFlags.None); if (receivedBytesLength > 0) { ms.Write(receivedBytes, 0, receivedBytesLength); } else { break; } } 最后 ms.ToArray() ,就能得到相应的数组了
recevieBytes是个定义好的固定大小的byte数组
2. IOCP模式
基本上都是微软官方的DEMO改的,在processreceive处理里面,有异步send的过程,然后,在processsend的处理里,执行成功了,会再次调用receiveasync()方法,最终会在processreceive方法里,
执行CloseSocket()的。
这里感觉奇怪的是,如果我直接在send里执行关闭,最终还是有 time_wait残留的(这个30秒-4分钟之内,一定会小时的,所以,也不算是影响太大),但是如果 receiveasync一次之后,执行的关闭,就没有了
,不知道最终的原理是什么意思,需要好好的研究一下哈,如果有明白的同学,也请大家分享一下哈!
相关文章推荐
- Html_div圆角
- POJ 3140 Contestants Division
- 关于OneProxy推广
- 微信开发笔记
- 使用Fiddler抓取Android、IOS手机的APP请求
- 华为hbase二级索引(secondary index)细节分析
- 第二周项目3—汉诺塔程序(2)
- 编写UEFI标准应用程序工程模块小结
- Virtualbox中Linux添加一个新磁盘
- javascript函数
- Android-query使用(2)
- 文字显示位置随着进度变化
- 依赖注入及AOP简述(二)——工厂和ServiceLocator
- 常用Maven插件介绍
- nginx 绑定域名(centos linux)
- js动态修改select和checkbox
- app 上架前的打包准备
- Combine Two Tables
- 【Vegas原创】EXCEL光标所在的行自动变色
- Mangos源码分析(12):服务器公共组件实现之事件与信号