CAsyncSocket的相关问题 本帖最后由 Toonyxm 于 2010-03-27 18:00:56 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.一方的CAsyncSocket 调用 Close 后,可以认为双方之间的Connection就被Close了,但另一方的 CAsyncSocket 不会自动 Close。其实Close()的主要功能是释放socket资源,使之不再有效!补充一点:CAsyncSocket的destructor会在内部调用Close().2.一方的程序异常退出后,操作系统会负责清理其占用的资源,包括Socket。所以与1)的情形一致!3.OnClose()被触发时,如果参数值不为0,那么就是异常断线了。但这个“触发”与真正的掉线时间之间可能有延迟,默认的最大值好像是4分钟。如果当前应用能接受这个延迟,就没有必要双方周期性互通消息验证了。4.只能说是有数据到了,不能保证全部到了。5.这个应该是TCP去保证的吧。TCP是可靠连接,如果某个数据包在传输过程中丢失了,发送端会自动重发的。操作系统中的协议栈已经帮你封装好这些东西了,你调用API时基本不需要考虑了。 麻烦再问下~ 关于第4个问题.怎么做到在OnReceive里当数据完全收到了再Receive()?Create() 参数里的SOCK_STREAM就是基于tcp/ip协议的了吧? 对,Create() 参数里的SOCK_STREAM就是表示基于tcp/ip。当有数据时,OnReceive就会被触发,所以你只管在OnReceive(){}中调用一次Receive()即可:nLength=Receive(szBuffer,sizeof(szBuffer),0);nLength是真正读取到的字节数目。如果数据没有收取完,OnReceive应该会继续被触发的,这个不需要你“手动”去触发! mfc程序中如何使用 vld内存泄露检测工具? Win32屏幕坐标函数是哪个? 请问,如何自已写的浏览器中关闭网页中播放的声音 对话框变量简单问题100分 求购稳定的即时通讯客户端软件 请问如何在dialog中插入链接? Platform SDK(2001.8)怎么安装? mfc编程问题...SetWindowText(fileName); 请问如何从C或C++当中,访问C#当中的类,变量?谢谢 mfc mdi ctalctrl 怎么添加新建按钮 关于对话框自动关闭的问题 读取exe文件版本号
2.一方的程序异常退出后,操作系统会负责清理其占用的资源,包括Socket。所以与1)的情形一致!
3.OnClose()被触发时,如果参数值不为0,那么就是异常断线了。但这个“触发”与真正的掉线时间之间可能有延迟,默认的最大值好像是4分钟。如果当前应用能接受这个延迟,就没有必要双方周期性互通消息验证了。
4.只能说是有数据到了,不能保证全部到了。
5.这个应该是TCP去保证的吧。TCP是可靠连接,如果某个数据包在传输过程中丢失了,发送端会自动重发的。操作系统中的协议栈已经帮你封装好这些东西了,你调用API时基本不需要考虑了。
麻烦再问下~ 关于第4个问题.
怎么做到在OnReceive里当数据完全收到了再Receive()?Create() 参数里的SOCK_STREAM就是基于tcp/ip协议的了吧?
当有数据时,OnReceive就会被触发,所以你只管在OnReceive(){}中调用一次Receive()即可:
nLength=Receive(szBuffer,sizeof(szBuffer),0);
nLength是真正读取到的字节数目。
如果数据没有收取完,OnReceive应该会继续被触发的,这个不需要你“手动”去触发!