`
znhyz1
  • 浏览: 158350 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Delphi中IdTcpServer 用户掉线检测方法

 
阅读更多

正常情况下,当登陆用户异常掉线并不会通知服务器,这时服务器一直以为用户在线,解决这种问题有以下两种方法:
一、轮训检测连接情况,需要Timer轮训检测,如下代码:

procedure TMainForm.Timer1Timer(Sender: TObject);
begin
  CheckForDisconnect();
end;

procedure TMainForm.CheckForDisconnect();
var
  lst:TList;
  I:Integer;
  User:TUser;
begin
  lst:=FUserList.LockList;
  try
    for I:=0 to lst.Count-1 do
      // 检查连接,如失去连接则会在本线程的OnExecute事件内出现读取异常,然后出发OnDsiconnet事件
      User.Context.Connection.CheckForGracefulDisconnect;
  finally
    FUserList.UnlockList;
  end;
end;

 

其中FUserList是登陆用户实体列表,用户实体内含有IdTcpServer用户线程信息。

二、连接时声明检测连接,需要用WinSock2(可网上下载),代码如下:

uses WinSock2;

procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
type
  TCP_KeepAlive = record
    OnOff: Cardinal;
    KeepAliveTime: Cardinal;
    KeepAliveInterval: Cardinal
  end;
var
  Val: TCP_KeepAlive;
  Ret: DWord;
begin
  Val.OnOff:=1;
  Val.KeepAliveTime:=xxx;
  Val.KeepAliveInterval:=xxx;
  WSAIoctl(AThread.Connection.Socket.Binding.Handle, IOC_IN or IOC_VENDOR or 4,
    @Val, SizeOf(Val), nil, 0, @Ret, nil, nil)
end;  

 

同样,当检测到用户连接失败时会在OnExecute事件内抛出读异常,然后激发OnDisconnect事件。

分享到:
评论

相关推荐

    Delphi idtcpserver断开与连接客户端

    在Delphi中,首先需要在表单上放置一个`TIdTCPServer`组件,并设置其属性,如监听的IP地址(`Bindings`)、端口号(`DefaultPort`),以及是否启用多线程(`OnExecute`事件的处理方式)。然后在程序运行时调用`...

    delphi通过IdTCPServer只允许一个用户登录

    以上就是关于“通过 `IdTCPServer` 只允许一个用户登录”的实现方法和注意事项。通过这样的设计,我们可以确保系统的安全性,防止未经授权的用户访问,并提供更稳定的服务。希望这个方案对你的项目有所帮助。在实际...

    delphi_idtcpserver断开与连接客户端

    本文将深入探讨如何在Delphi中使用IDTCPServer组件处理客户端连接的建立与断开。 IDTCPServer是Indy提供的一种异步网络服务器组件,它支持TCP/IP协议,可以用于实现各种网络服务,如聊天室、文件传输、游戏服务器等...

    Delphi 基于IdTcpServer和IdTcpClient通讯实例源码.rar

    delphi 基于IdTcpServer和IdTcpClient的通讯实例,包括客户端和服务端,  procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);  begin  Memo1.Lines.Text:='来自主机' AThread.Connection.Socket....

    Delphi7 基于IdTcpserver和IdTcpClient的通讯程序

    5. **断开连接**:在适当的时候,例如用户请求断开连接或者服务器检测到异常,调用IdTcpServer的Disconnect或客户端的Disconnect方法结束连接。 6. **测试与调试**:编译并运行服务器端程序,然后在另一个实例中...

    Delphi通过IdTCPServer只允许一个用户登录..rar

    在Delphi编程环境中,IdTCPServer组件是 Indy(Internet Direct)库的一部分,用于构建TCP服务器应用程序。这个组件使得开发者可以轻松地创建网络服务,处理客户端的连接请求。标题和描述提到的问题涉及到如何配置和...

    Delphi简单IDTCPsever和IDTCPclient应用

    在Delphi中,你可以将IDTCPServer拖放到你的表单上,并设置其属性来配置服务器的行为。例如,你可以设置监听的IP地址(BindTo)和端口号(Port)。当一个客户端连接到服务器时,会触发OnConnect事件,这时你可以处理...

    Delphi通过IdTCPServer只允许一个用户登录

    Delphi网络编程源码实例,IdTCPServer只允许一个用户登录到程序,通过IdTCPServer只允许一个用户登录,解决多用户登录问题。考虑到退出异常但是保证登录正确的情况,很实用。 运行环境:Windows/Delphi7

    Delphi 中TcpServer和TcpClient用法

    在Delphi中,网络编程同样是一个重要的组成部分,特别是在开发需要进行网络通信的应用时。本文将详细介绍Delphi 中 IdTcpServer 和 IdTcpClient 的使用方法,并通过实例演示如何构建一个简单的客户端与服务端应用...

    delphi7的IdTCPClient和IdTCPServer的write用法

    ### Delphi7中IdTCPClient和IdTCPServer的Write方法使用详解 #### 一、简介 在Delphi7中,使用Indy组件库(Internet Direct)进行网络编程时,经常会遇到需要通过`IdTCPClient`和`IdTCPServer`进行数据交换的情况...

    delphi IdTCPServer文件传输

    在Delphi中,可以使用IdTCPClient组件来建立连接。连接成功后,服务器端可以通过OnConnect事件处理程序来识别并准备处理新的客户端连接。 2. **文件分块**:由于TCP协议是流式的,文件不能直接作为单一的数据包发送...

    IdTCPServer和IdTCPClient的使用(支持文件发送)

    本文将深入探讨如何在Delphi环境中使用 Indy 的 `IdTCPServer` 和 `IdTCPClient` 组件进行文件传输。这两个组件是 Indy(Internet Direct)库的一部分,为开发者提供了强大的网络通信功能。 `IdTCPServer` 是一个...

    idtcp.rar_IdTcp_Idtcp 文件_delphi IdTCPServer_delphi idtcp_delphi

    在Delphi中实现这样的功能需要对TCP/IP网络编程有一定理解,同时熟悉Indy库的使用。通过`IdTcpServer`和`IdTcpClient`,开发者可以构建各种网络应用,包括聊天室、文件共享系统甚至简单的FTP服务器。记得在编写代码...

    delphi的IdTCPClient和IdTCPServer的Writestring用法

    在Delphi中,`IdTCPClient` 和 `IdTCPServer` 提供了多种方法来发送和接收数据,包括 `Writeln` 和 `WriteStrings` 方法。 ##### 1. Writeln 方法 `Writeln` 方法主要用于发送一个字符串后跟随一个换行符,这对于...

    idtcpserver限制客户端

    在IT行业中,网络编程是至关重要的一个领域,而`idTCPServer`是Delphi或C++Builder等RAD Studio开发环境中广泛使用的组件,用于构建服务器端应用程序。`idTCPServer`是一个基于TCP协议的服务器组件,它允许开发者...

    IdTCPServer接收发送字符串各种方式

    在IT行业中,网络通信是至关重要的一个领域,而 Indy TCP Server 是 Delphi 和 C++Builder 开发者常用的一个网络通信组件库。本篇文章将详细探讨如何利用 Indy TCP Server 组件来实现字符串的接收与发送,这在构建...

    Delphi-idtcpserver断开与连接客户端的类文件

    摘要:Delphi源码,网络相关,idtcpserver Delphi环境下的一个pas类文件,用于idtcpserver断开与连接客户端,使用这个类可连接或断开idtcpserver客户端,当客户端主动与服务端断开时,idtcpserver事件Disconnect能够...

    Delphi10中idHttpServer接收中文参数乱码的处理

    idHttpServer在开发中比较方便,一般情况都能应付。但在接收浏览器发送的带中文URL时,取参数就会是乱码。经过查找资源,发现大部分浏览器,中文一般会先转码为utf-8,此时,idHttpServer控件会根据请求头中...

    delphi 2010 tcpipserver

    3. **数据收发**:在OnExecute事件中,你可以读取来自客户端的数据(使用ReadBuffer或ReadLine方法),处理这些数据,然后使用Write或WriteBuffer方法将响应回传给客户端。 4. **错误处理**:为了提高程序的健壮性...

    delphi 网络文件传输 IdTCPServer

    DELPHI写的,用最新的IdTCPServer组件,用于网络上的文件传输,也可以用于互联网上的文件传输。。分为客户端和服务端两个程序,服务端只需指定端口,指定被COPY的目录,客户端指定服务端IP地址,和端口号,COPY的...

Global site tag (gtag.js) - Google Analytics