scktsrvr.exe套接字服务器问题,谢谢大使(100分)

  • 主题发起人 多多帮助
  • 开始时间

多多帮助

Unregistered / Unconfirmed
GUEST, unregistred user!
scktsrvr中的用户连接列表中。能实时反应出客户端的连接情况(就是说客户端异常断开后,立即能检测并删除相应的连接信息)
是怎么做的,用什么代码,谢谢,请指教!
 
没有知道的吗,说2句啊
 
在网上看了很多说用心跳包来处理.具体怎么做,给个链接也行.谢谢
 
把 Socket Midas的ScktSrvr.exe 和中间层服务器做在一起也行,问题是怎么实现.
 
异常断开后好像不可以吧
 
TCP_KEEPALIVE inKeepAlive = {0};
unsigned long ulInLen = sizeof(TCP_KEEPALIVE);
TCP_KEEPALIVE outKeepAlive = {0};
unsigned long ulOutLen = sizeof(TCP_KEEPALIVE);
unsigned long ulBytesReturn = 0;
//设置socket的keep alive为10秒,并且发送次数为3次
inKeepAlive.onoff = 1;
inKeepAlive.keepaliveinterval = 1;
inKeepAlive.keepalivetime = 3000;
//为选定的SOCKET设置Keep Alive,成功后SOCKET可通过Keep Alive自动检测连接是否断开
WSAIoctl(m_hSocket, SIO_KEEPALIVE_VALS,
(LPVOID)&inKeepAlive, ulInLen,
(LPVOID)&outKeepAlive, ulOutLen,
&ulBytesReturn, NULL, NULL);
 
const
MAX_BUFFER = 1024;
var
Buf:Array [0..MAX_BUFFER-1] of Byte;
BytesRead,ErrCode:Integer;
begin
BytesRead:=Recv(hSocket,@Buf[0],SizeOf(Buf),0);
if BytesRead>0 then
//正常情况,有数据被读取到
else
if BytesRead=0 then
//Closed gracefully
else
begin
ErrCode:=WSAGetLastError;
if ErrCode=WSAECONNRESET then

//连接的另一端重设了连接
else
if ErrCode=WSAECONNABORTED then
//连接被强行中断 比如死机 程序当掉 网线被拔除
else
//其它套接字错误
end;
end;

对于Send 跟Recv是一样的处理 不同的是Send不会返回0 处理返回SOCKET_ERROR(也就是-1)的情况就可以了。
 
Delphi7自带的Indy版本就不能自动捕捉连接异常中断的情况。我自己实现了一下做了一个客户端和服务端 不过纯粹实现收发而已。可以捕捉连接正常和异常中断的情况 用的就是上面的方法。有需要留下Email偶发给你。
 
太好了,谢谢发我一份.
405987643@qq.com
谢谢
 
其实就是定时给服务器发个数据包,告诉服务器我还在线。
服务器随时检测客户端时候超时没有发送数据包,如果超时则判断断线
 
怎么写.我没这方面的经验,写的不一定好,给贴点代码吧,详细越好.呵呵
 

Similar threads

顶部