很简单的一个例子.. 客户端 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;
TCP/IP方式连接服务器,若断开,则需要重新连接连接,通过心跳检测服务器是否再次启动
若采用UDP方式,则无需重新启动
若采用UDP方式,则无需重新启动
客户端
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异常判断,去执行重连