Delphi 客户端连接 服务器 数据库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi 客户端连接 服务器 数据库相关的知识,希望对你有一定的参考价值。

Delphi 客户端,服务器 数据库是怎么连接的啊
就是我现在 做仓库管理系统,一服务器下挂几台客户端,数据库用SQL或者ACCESS,用那些数据库控件 啊,有成功例子说明更是感谢,现在专门做这类的软件公司都通常怎么做的啊,怎么个思想的,就是怎么个客户端连服务器的数据库的, 不会回答偏题啊,回答好的再加分,我有的是分

通过发送请求request,将要进行的操作发送到服务器,服务器返回操作结果。客户端可以不关心数据库类型。而且客户端不直接连接服务器数据库更具安全性。只需要服务端和客户端的相关控件 参考技术A 愿意出人民币的话,可以帮你做 参考技术B 我也来学习

delphi datasnap 心跳包

为了能让我们的服务程序更加稳定,有些细节问题必须解决。就如上一讲中提到的客户端拔掉网线,造成服务器上TCP变成死连接,如果死连接数量过多,对服务器能长期稳定运行是一个巨大的威胁。
另外,经过测试,如果服务器上有TCP死连接,那么服务程序连接数据库,也会产生那个一个死连接。这样的话,给数据库服务器也造成威胁。所以,服务器程序编写的好坏,直接影响系统的稳定性!
如何解决TCP死连接的问题,有多种方法,其中最有效的就是心跳包技术。
我们在DSServer的OnConnect事件中加入心跳包代码

uses IdTCPConnection,IdWinsock2

........

type
  TCP_KeepAlive = record
    OnOff: Cardinal;
    KeepAliveTime: Cardinal;
    KeepAliveInterval: Cardinal;
end;

........

procedure TServerContainer1.DSServer1Connect
  (DSConnectEventObject: TDSConnectEventObject);
var
  Val: TCP_KeepAlive;
  Ret: DWord;
  ClientConnection: TIdTCPConnection;
begin
  ClientConnection := TIdTCPConnection(DSConnectEventObject.ChannelInfo.Id);
  Val.OnOff := 1;
  Val.KeepAliveTime := 5000;
  Val.KeepAliveInterval := 3000;
  WSAIoctl(ClientConnection.Socket.Binding.Handle, IOC_IN or IOC_VENDOR or 4,
    @Val, SizeOf(Val), nil, 0, @Ret, nil, nil);
end;

观察上述代码,我们把心跳包放到服务端上执行,如果服务器的某个TCP连接在5秒钟没有收到数据,将会发送向对端发送心跳包,间隔3秒钟,连续发送5次(参数详解见上一讲高级技术4)。如果5次以后对端还没有应答,服务器将结束该TCP连接。TCP的连接可以使用 netstat -p tcp 命令查看。

上述代码还不能直接使用,还需要引用一个winsock2.pas
请到
http://download.csdn.net/source/2921601 下载,下载后需要直接添加文件并引用文件即可

当该TCP结束后,delphi编写的服务程序会自动结束和数据库的连接。我用的是FireBird数据库,大家可以使用命令查看 SELECT MON$USER, MON$REMOTE_ADDRESS,
  MON$REMOTE_PID,
  MON$TIMESTAMP
 FROM MON$ATTACHMENTS

现在服务器的tcp死连接和数据库的死连接都清除了,我们的系统将能长期稳定的运行。

http://blog.csdn.net/zhangxiaonanwin/article/details/6048912

以上是关于Delphi 客户端连接 服务器 数据库的主要内容,如果未能解决你的问题,请参考以下文章

Delphi TIdTcpServer多客户端定时请求连接、发数据,取固定几个客户端上传数据时CPU占用率高怎么解决?

delphi ORACLE三层架构的服务端开发

请教如何用delphi5连接oracle数据库

Wininet 客户端端口 - delphi 2010

delphi datasnap 心跳包

delphi如何连接oracle数据库