看资料上说,tcp协议为保证数据能够可靠地传输,会在数据包之间维持状态信息,这些状态信息可以保证数据进行可靠的传递。例如,发送方可以记住什么数据发送出去了还没有得到确认,什么数据是什么时候发送出去的。如果一定时间间隔后没有得到应答,发送方就重发该数据。接收方可以记住什么数据已经接收到了,而且可以丢弃重复的数据。如果数据包没有按顺序到达,那么接收方可以先保存数据,等待逻辑上先于它的数据包到达。
我理解这些机制应该是TCP协议自身实现的,不需要在程序中做一些编码操作。可是我在一个程序中看到,它在代码中设置了发送超时时间和接收超时时间,这是怎么回事?
当我用WinSock的API开发客户端网络程序时,需要考虑到发送超时或是接收超时的处理吗?
我是每隔1分钟向服务器端发送一组数据,如果程序中检测到send或是recv返回值为SOCKET_ERROR,是不是就可以断定网络连接断开了(如果不这样,那在发送和接收过程中如何判断网络连接断开了?)?此时不调用closesocket(),直接调用connect()连接服务器可以吗?还是说当网络连接断开后必须先closesocket()才行?
问题有点多,但都是基础性的问题,盼望高手给解答一下。多谢
我理解这些机制应该是TCP协议自身实现的,不需要在程序中做一些编码操作。可是我在一个程序中看到,它在代码中设置了发送超时时间和接收超时时间,这是怎么回事?
当我用WinSock的API开发客户端网络程序时,需要考虑到发送超时或是接收超时的处理吗?
我是每隔1分钟向服务器端发送一组数据,如果程序中检测到send或是recv返回值为SOCKET_ERROR,是不是就可以断定网络连接断开了(如果不这样,那在发送和接收过程中如何判断网络连接断开了?)?此时不调用closesocket(),直接调用connect()连接服务器可以吗?还是说当网络连接断开后必须先closesocket()才行?
问题有点多,但都是基础性的问题,盼望高手给解答一下。多谢
解决方案 »
- #include "Winsock2.h"问题
- 切割单文档窗口
- 询找 Visual Studio .NET 开发环境中的 docking功能?像 class view / solution explorer 窗口可靠在四边并有标签。
- 有对信息隐藏工具有深入了解的同志吗?非常想知道S-Tools 4.0 隐秘信息嵌入的方式!
- 如何在VC里实现类似QBasic的paint功能?
- debug 和release
- 如何获得一个局域网(同一个网段)内的所有ip地址和主机名?
- VC 与 Delphi 相比有什么优势??
- 请问,在多线程程序中频繁调用函数malloc(),free()安全吗?
- 要在原有的程序里实现语音控制,大家给个方案吧?
- 请教大家一个关于终止线程的问题,谢谢大家
- 关于在VC使用 dbghelp API 的问题
-----------------------------------------------------------------------------------------------如果非正常网络断开比如网线断啦 客户端没有通知服务端关闭链接, 所以要设置超时
接收需要超时判别,发送不要。
接收/发送都要 timeout
我是每隔1分钟向服务器端发送一组数据,如果程序中检测到send或是recv返回值为SOCKET_ERROR,是不是就可以断定网络连接断开了(如果不这样,那在发送和接收过程中如何判断网络连接断开了?)?此时不调用closesocket(),直接调用connect()连接服务器可以吗?还是说当网络连接断开后必须先closesocket()才行?
-------------------------------------
1 当你设置了发送与接收超时,当然要考虑。
2 检测到send或是recv返回值为SOCKET_ERROR,是不是就可以断定网络连接断开了(如果不这样,那在发送和接收过程中如何判断网络连接断开了?)?
答:返回值为SOCKET_ERROR不一定是网络连接断了,不能通过返回值来判断网络连接断开,通常用发送心跳包来做。
3 此时不调用closesocket(),直接调用connect()连接服务器可以吗?还是说当网络连接断开后必须先closesocket()才行.
答:若发送send错误与recv错误,根据返回的错误码来处理。具体情况具体分析。参见MSDN。