怎样判断TCP协议发送失败?
mbctb 2015-11-01 03:14:39 比如我在客户端,用TCP连接,向服务器发送一个数据包:
if(send(hsock, (char *)&s, len, 0) == SOCKET_ERROR)
MessageBox(NULL, _T("发送失败!"), NULL, MB_ICONERROR);
我在本地没有弹出“发送失败”的提示窗口,并不表示发送成功了,因为它只是放到发送缓冲区了,不能保证服务器一定收到。
可是如果因为某种故障,服务器并没有收到(可能是网络传输的问题),那我在本地如何知道发送没有成功呢?
我的笨拙的做法是:服务器收到数据后,向客户端发送一个包,表示收到了,可是这样使得程序变得复杂。
我听说:TCP协议本身就是可靠连接,那协议本身有没有一种机制,使得服务器没有收到时,我本地能知道呢?
(查资料说:TCP协议本身有一种机制:发送以后,会启动一个定时器,对方没有收到,本地计时器超时后,会重发,可是,它只是重发,并不会提示我,可是我作为程序编制者,如何知道没有发送成功呢?以便进入错误处理程序呢?)