我写了一个使用CSocket的程序,客户端往服务端发送一些消息,服务端是这么写的
CSocket soc
if(!soc.Create())
{
MessageBox("创建socket失败!");
return;
}
if(!soc.Connect(m_ip,m_port))
{
MessageBox("连接socket失败!");
return;
}
要发送消息的时候是
                msg_type msg;
msgsize = soc.Send(&msg,sizeof(msg_type),0);
然后判断msgsize是否是SOCKET_ERROR。
一般情况下这样没问题,但有时候服务器因为某种意外down掉了,但是我这里的send仍然返回正常的值,显示发送成功,这是怎么回事,应该怎么处理。

解决方案 »

  1.   

    socket tcp 链路不会因为以外情况如网线断,掉电能及时的断开的,要用心跳包来判断
      

  2.   

    多谢ls,小弟初学,能否说详细点。
    心跳包是否会严重占用系统资源,另外,如果普通send会出现那种问题,那么心跳包不也是会出现那种问题吗,就是明明断开了,但是心跳包还是会显示成功,假如这个时候我再发消息,仍然会出现那种问题。还有,在MFC里还有什么比较方便的可以替代CSocket这种偏上层的类,可以避免此类问题?