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也无法通信,客户端早迟都会触发一个错误