scktsrvr中的问题,多谢(20分)

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

多多帮助

Unregistered / Unconfirmed
GUEST, unregistred user!
scktsrvr中的用户连接列表中。能实时反应出客户端的连接情况(就是说客户端异常断开后,立即能检测并删除相应的连接信息)
是怎么做的,用什么代码,谢谢,请指教!
 
好像Delphi中有源码,你研究一下吧
 
处理disconnect事件就可以了
 
就是搞不懂,才来问啊。有没有源码或资料呢,谢谢
 
Source目录下有源代码的
 
Source下有,哪句才是关键。我是初学者。谢谢
 
除去那些不重要,个人感觉最重要就是
TSocketDispatcher
TSocketDispatcherThread
TSocketService (这个就是把这个做成了服务 ,可以注册在系统中)
类中最重要就是ClientExecute在线程类里面,
其他就是看你自己了,自己仔细看看就明白了.
 
谁帮我把实现这个实时反应出客户端的连接情况代码贴出来。感激不尽。
 
分太少不想搞。[:D]
 
没有分,没办法呀。我知道你喜欢RMB。破例一次吧,谢谢了
 
各位路过大享不要只看啊。说句话也行啊
 
在OnClientConnect 里可以看到用户的连接:
Label1.Caption := Socket.RemoteAddress + " 连接";
在OnClientDisconnect 里可以看到用户的关闭:
Label1.Caption := "用户 " + Socket.RemoteAddress + " 断开";
在OnClientError 里可以清除错误:
ErrorCode := 0;
在OnClientRead 里可以读取数据:
Socket.ReceiveBuf(buff, RecLen);
 
我年轻的时候都是自学成才的。
 
我的意思是怎么能捕捉到一个非正常关闭的连接。我试了。在scktsrvr中可以。
function TCustomWinSocket.ReceiveBuf(var Buf;
Count: Integer): Integer;
var
ErrorCode: Integer;
begin
Lock;
try
Result := 0;
if (Count = -1) and FConnected then
ioctlsocket(FSocket, FIONREAD, Longint(Result))
else
begin
if not FConnected then
Exit;
Result := recv(FSocket, Buf, Count, 0);
if Result = SOCKET_ERROR then
begin
ErrorCode := WSAGetLastError;
if ErrorCode <> WSAEWOULDBLOCK then
begin
Error(Self, eeReceive, ErrorCode);
Disconnect(FSocket);
if ErrorCode <> 0 then
raise ESocketError.CreateResFmt(@sWindowsSocketError,
[SysErrorMessage(ErrorCode), ErrorCode, 'recv']);
end;
end;
end;
finally
Unlock;
end;
end;
好像是这个。我在自己的程序中怎么调用呢
 
算了。还是问下怎么把scktsrvr做进自己的程序里呢?
 
唉。在这上面问了不少问题。
最后还得自己研究,郁闷
 
用INDY不行吗?只是INDY有个BUG,客户端断开后服务端容易卡死,不知道啥问题,不知道最新版本解决没有
 
主塞方式onexecute中
try
finally
try
连接.disconnect;
except
连接早已经段开了!
end;
end;
 
这个有个技术可以解决不过要从地层写起来,用keeplive socket地层有设置函数,可以处理。
 
把scktsrvr做进自己的程序里,最好有例子。多谢
 
后退
顶部