請求高手給出一個INDY控件編寫客戶端,連服務端程序(200分) (200分)

  • 主题发起人 主题发起人 lylyly
  • 开始时间 开始时间
L

lylyly

Unregistered / Unconfirmed
GUEST, unregistred user!
請給過例子,
主要工作是:
客戶端登錄服務端,服務端用一個列記錄下來,退出後刪除.

登錄成功後,客戶向服務端發送請求查詢命運,服務端收到命令後查詢一個表,
把返回結果發給客戶端.

用INDY控件做的服務端能不能支持,200客戶端.
 
自己写,用完成端口吧,支持2000个都没问题,我正在搞一个完成端口的服务器,遇到一些问题,如果你不是用Midas,应该没有问题。
 
你这个应该用完成端口,用indy控件比较勉强,因为要访问数据库,并且indy server 会为每个客户建立一个连接,200个客户有点牵强,虽然用indy编程比较方便

用完成端口的话,这方面代码到www.codeproject.com 上面有,vc的

还有你可以用线程池的方法,预先建立20个左右线程,然后由连接过来就调用其中一个
free的线程工作并返回结果,如果你的客户离散性比较大的话,这个方法可以试一下
 
用完成端口,能給出例子嗎?

完成端口,我真的是一點不懂.
 
給一個INDY的例子就行了,
能連100客端的就OK了.
 
Indy Demo我传到www.playicq.com里了。
 
hiyaolee,全都是沒有用的,

我要的是服務端要連數據庫,

客戶端發,命令給服務端,服務端跟據命令,在數據庫中刪除或查詢.
把結果返回給客戶端.
 
我刚做了一个程序,是一个小型的分布系统,用的就是INDY控件(IDUDPSERVER,IDUDPCLIENT,IDTCPSERVER,IDTCPCLIENT)。用一台机子做服务器,接收客户端的注册,登陆等信息,服务器根据接收到的请求,对数据库进行操作,然后返回消息给客户端。
由于功能很复杂,通讯相当频繁。用50台客户端测试过,没什么问题。
Indy的功能很不错,Server是多线程的,健壮性,效率都还可以。
 
能不能,把通訊那部分發給我看,

你試在局域網測試的,還是在互聯網....
 
crazymoon,
你他媽豬羅,你在發表什麼卵意思.
 
用TCP控件通讯的流程大致如下:
步骤 客户端 服务器端
1、 发送连接请求 --> 发送欢迎信息
2、 判断服务器的欢迎信息,
如果不是正常信息则出错退出
3、 发送服务请求命令 --> 验证后,提供服务,并回送成功与否标志。
4、 判断操作成功与否,再做决定。

Code For Server:
首先设置IdTCPServer的Port,IP等。在IdTCPServer的OnExecute()事件中,代码如下:
try
//接收连接信息
AThread.Connection.WriteLn('OK>Welcome To MyServer'); //发送欢迎信息
s := AThread.Connection.ReadLn; //读取请求命令
if s=' ' then
exit;
//身份验证
{Your confirmation code here}
//根据s的不同,提供不同的服务,注意OnExecute是多线程的,
//这里的代码要具有线程安全性
{You Server Code Here}
AThread.Connection.WriteLn('OK'); //or writeln('Err');
except
{Your Exception_Handle Code Here}
end;

Code for Client:
在需要连接服务器的地方添加如下代码:
with MyIdTCPClient do
begin
{set Port,BoundIP,Host Properity,ReadTimeOut first}
connect; //连接
try
s:=ReadLn; //读取欢迎信息
if pos('MyServer',s)=0 then exit;
writeln(MYCOMMAND);
s:=ReadLn; //读取返回信息
if pos('OK',s)=0 then //Some Error Happend.
{Your Code here}
else
{your code here}
finally
disconnect;
end;
end;
以上是用writeln()和ReadLn()方法,也可以用其他的方法,可以参见INDY的帮助。
设计服务器端时要比客户端难,因为要用到多线程,对多线程编程如果你不熟的话,还是先看书为妙。
UDP通讯要简单的多,用Send()方法和OnUDPRead()事件就搞定了。
其实INDY编程比较简单,主要是客户端和服无端的协调,如开头提到的。

是在局域网中测试的,在Internet上的不同主要在于传输时延的考虑,TimeOut要设置大一些。

 
我刚用Indy完成了一个程序,不过不是用来连数据库的.
我觉得,用Indy来完成数据库传输有点怪怪的,当然,如果一定要用也不是不行的.
首先你在Client端发个消息给Server端,然后Server端用查询语句把Client发的消息查询数据.
Server端得一条条数据重新传输给Client端,这点我觉得是很痛苦的,因为Indy不是用来
连接数据的控件,他本来就是用来在各网络协议直接传输简单的数据的,我不知道你为什么
不用ADO或者用其它更专业的数据库控件?
 
to lylyly:
操你妈的,关你鸟事!别他妈的放臭屁。
 
我记得delphi自身就带有indy的例子,要不你去看看。
200个客户端,估计服务端你要开个线程池(单独建立连接
资源耗费太大),可是多线程比较麻烦,祝你好运!
 
我给你源程序:
TT8 利用 Delphi7 Indy 开发的 文件上传例子,希望对大家有帮助 :)
ftp://fox:fox@61.133.63.168/tt8/transfile/transfile.rar
 
tt8:你的例子对lyly有什么帮助么?
不过能够把自己做的东西放出来,这就已经是很好的事情了。值得各位发扬。造福后人嘛。
如果你早一点放出来就好了,那时我用INDY FTPSEVER做服务器差点头暴。
 
当然有帮助,这个是核心问题
解决了通信问题,其他的他自己会。
 
tt8老大好象沒什麼幫助呀
 
后退
顶部