首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Socket,该怎么解决

2013-01-23 
Socket当服务端和客户端建立socket后,服务端退出再重进去,能否自动恢复socket间的连接,如果不能,如何处理,

Socket
当服务端和客户端建立socket后,服务端退出再重进去,能否自动恢复socket间的连接,
如果不能,如何处理,使服务器端重新建立和客户端的连接?
[解决办法]
第二次应该当一个新的连接建立吧
[解决办法]
应该要从客户端来处理吧,发送心跳包给服务器,如果发现服务器断掉了,再重连就是了
[解决办法]

引用:
当服务端和客户端建立socket后,服务端退出再重进去,能否自动恢复socket间的连接,
如果不能,如何处理,使服务器端重新建立和客户端的连接?

不能,必须得从客户端解决。每隔一段时间发送一次心跳包,判断服务器是否在线,不在线的话需要重连
[解决办法]
来晚了
TCP/IP方式连接服务器,若断开,则需要重新连接连接,通过心跳检测服务器是否再次启动
若采用UDP方式,则无需重新启动
[解决办法]
TCP/IP方式连接服务器,若断开,则需要重新连接连接,通过心跳检测服务器是否再次启动 
若采用UDP方式,则无需重新启动
[解决办法]
何为服务端?

服务端如果重启了,或者当机了,那需要重练的
[解决办法]
引用:
啥是心跳检测?

就是定时的发送数据包,说明下我还活着
[解决办法]
http://topic.csdn.net/u/20100110/21/e9fcdd35-3962-47ad-aa92-f9f7fe9e4526.html?16098

看一下这个贴子。CSDN里面的精华贴。
[解决办法]
很简单的一个例子..
客户端
procedure TForm1.Timer1Timer(Sender: TObject);
var
  pData : array[0..255] of char;
begin
  FillChar(pData,Length(pData),0);
  StrCopy(pData,PChar('测试'));
  send(AcceptSock,pData,Length(pData) * SizeOf(Char) ,0);
end;
服务器端的socke通信事件:
procedure TForm1.WMCLIENTSOCK(var message: TMessage);
var
  ret : integer;
  fbuf : array[0..255] of Char;
begin
  case WSAGetSelectEvent(message.LParam) of
    FD_READ :
    begin
    //在这里分离出数据包的信息,判断是否是客户端发过来的心跳包
     //当然数据结构得自己定义好
      ret := recv(SkC,fbuf,256,0);
      mmo1.Lines.Add('服务器端来的消息 :' + fbuf);
    end;
  end;
end;
[解决办法]
这个本身逻辑就有逻辑
如何处理,使服务器端重新建立和客户端的连接?
----------------------------
你服务端都退出了,SOCKET原有的连接都关闭了
该在客户端根据WSAGetLastError异常判断,去执行重连
[解决办法]
如果是tcp连接,服务器关了之后,与客户端的连接属性也随之没有了,重新启动的服务器端套接字没有客户端的sockaddr也无法通信,客户端早迟都会触发一个错误

热点排行