正常情况下,当登陆用户异常掉线并不会通知服务器,这时服务器一直以为用户在线,解决这种问题有以下两种方法:
一、轮训检测连接情况,需要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中,首先需要在表单上放置一个`TIdTCPServer`组件,并设置其属性,如监听的IP地址(`Bindings`)、端口号(`DefaultPort`),以及是否启用多线程(`OnExecute`事件的处理方式)。然后在程序运行时调用`...
以上就是关于“通过 `IdTCPServer` 只允许一个用户登录”的实现方法和注意事项。通过这样的设计,我们可以确保系统的安全性,防止未经授权的用户访问,并提供更稳定的服务。希望这个方案对你的项目有所帮助。在实际...
本文将深入探讨如何在Delphi中使用IDTCPServer组件处理客户端连接的建立与断开。 IDTCPServer是Indy提供的一种异步网络服务器组件,它支持TCP/IP协议,可以用于实现各种网络服务,如聊天室、文件传输、游戏服务器等...
delphi 基于IdTcpServer和IdTcpClient的通讯实例,包括客户端和服务端, procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread); begin Memo1.Lines.Text:='来自主机' AThread.Connection.Socket....
5. **断开连接**:在适当的时候,例如用户请求断开连接或者服务器检测到异常,调用IdTcpServer的Disconnect或客户端的Disconnect方法结束连接。 6. **测试与调试**:编译并运行服务器端程序,然后在另一个实例中...
在Delphi编程环境中,IdTCPServer组件是 Indy(Internet Direct)库的一部分,用于构建TCP服务器应用程序。这个组件使得开发者可以轻松地创建网络服务,处理客户端的连接请求。标题和描述提到的问题涉及到如何配置和...
在Delphi中,你可以将IDTCPServer拖放到你的表单上,并设置其属性来配置服务器的行为。例如,你可以设置监听的IP地址(BindTo)和端口号(Port)。当一个客户端连接到服务器时,会触发OnConnect事件,这时你可以处理...
Delphi网络编程源码实例,IdTCPServer只允许一个用户登录到程序,通过IdTCPServer只允许一个用户登录,解决多用户登录问题。考虑到退出异常但是保证登录正确的情况,很实用。 运行环境:Windows/Delphi7
在Delphi中,网络编程同样是一个重要的组成部分,特别是在开发需要进行网络通信的应用时。本文将详细介绍Delphi 中 IdTcpServer 和 IdTcpClient 的使用方法,并通过实例演示如何构建一个简单的客户端与服务端应用...
### Delphi7中IdTCPClient和IdTCPServer的Write方法使用详解 #### 一、简介 在Delphi7中,使用Indy组件库(Internet Direct)进行网络编程时,经常会遇到需要通过`IdTCPClient`和`IdTCPServer`进行数据交换的情况...
在Delphi中,可以使用IdTCPClient组件来建立连接。连接成功后,服务器端可以通过OnConnect事件处理程序来识别并准备处理新的客户端连接。 2. **文件分块**:由于TCP协议是流式的,文件不能直接作为单一的数据包发送...
本文将深入探讨如何在Delphi环境中使用 Indy 的 `IdTCPServer` 和 `IdTCPClient` 组件进行文件传输。这两个组件是 Indy(Internet Direct)库的一部分,为开发者提供了强大的网络通信功能。 `IdTCPServer` 是一个...
在Delphi中实现这样的功能需要对TCP/IP网络编程有一定理解,同时熟悉Indy库的使用。通过`IdTcpServer`和`IdTcpClient`,开发者可以构建各种网络应用,包括聊天室、文件共享系统甚至简单的FTP服务器。记得在编写代码...
在Delphi中,`IdTCPClient` 和 `IdTCPServer` 提供了多种方法来发送和接收数据,包括 `Writeln` 和 `WriteStrings` 方法。 ##### 1. Writeln 方法 `Writeln` 方法主要用于发送一个字符串后跟随一个换行符,这对于...
在IT行业中,网络编程是至关重要的一个领域,而`idTCPServer`是Delphi或C++Builder等RAD Studio开发环境中广泛使用的组件,用于构建服务器端应用程序。`idTCPServer`是一个基于TCP协议的服务器组件,它允许开发者...
在IT行业中,网络通信是至关重要的一个领域,而 Indy TCP Server 是 Delphi 和 C++Builder 开发者常用的一个网络通信组件库。本篇文章将详细探讨如何利用 Indy TCP Server 组件来实现字符串的接收与发送,这在构建...
摘要:Delphi源码,网络相关,idtcpserver Delphi环境下的一个pas类文件,用于idtcpserver断开与连接客户端,使用这个类可连接或断开idtcpserver客户端,当客户端主动与服务端断开时,idtcpserver事件Disconnect能够...
idHttpServer在开发中比较方便,一般情况都能应付。但在接收浏览器发送的带中文URL时,取参数就会是乱码。经过查找资源,发现大部分浏览器,中文一般会先转码为utf-8,此时,idHttpServer控件会根据请求头中...
3. **数据收发**:在OnExecute事件中,你可以读取来自客户端的数据(使用ReadBuffer或ReadLine方法),处理这些数据,然后使用Write或WriteBuffer方法将响应回传给客户端。 4. **错误处理**:为了提高程序的健壮性...
DELPHI写的,用最新的IdTCPServer组件,用于网络上的文件传输,也可以用于互联网上的文件传输。。分为客户端和服务端两个程序,服务端只需指定端口,指定被COPY的目录,客户端指定服务端IP地址,和端口号,COPY的...