Delphi Indy TIdFTP.List 乱码问题……

Delphi Indy TIdFTP.List 乱码问题……,第1张

检查一下FTP服务器的的设置!

serv-u8.0以前因为不支持utf编码。。所以不支持中文。

建议你用xlight ftp server 试试!

记得打开UTF-8编码。

你有没有用DELPHI开发Internet程序?是不是常常会烦恼FastNet组件为什么没有源代码?有很多问题 不看源代码 真不知道是什么问题 是不是也觉得FastNet组件支持的网络协议还不够多?现在不用烦恼了 有一套功能很丰富 使用很方便 开放源代码的免费INTERNET控件集可以解决你的烦恼 这套控件集就是INDY了

什么是INDY?它有什么功能?怎么用?就让我慢慢道来

INDY的全名是Internet Direct(也叫Winshoes) 它是一套开放源代码的Internet控件集 它支持大部分流行的Internet协议 包括TCP UDP DNS ICMP FINGER FTP GOPHER HTTP POP SMTP TELNET WHOIS等 支持BASE MD MD MD 等编解码 提供INTERNET流行协议的客户端和服务器控件 INDY控件集的客户端和服务器控件都有完整 详细的源代码例程和帮助文件 用户可以根据这些例子 简单方便快速的建造各种服务器程序 例如WEB服务器 TELNET服务器 IRC服务器 TCP UDP服务器等 而这些服务器都是支持多线程的 用户也可以很简单的编写出各种客户端程序 例如EMAIL FINGER FTP PING TELNET等 著名的OICQ使用的协议是UDP 有了INDY你可以使用UDP服务器和UDP客户端写出一个和OICQ较劲的东东来

INDY是完全基于SOCKET阻塞工作模式(后面讨论)的开发库 现在已经支持BORLAND DELPHI C++ BUIDER和最新的Kylix(LINUX里的DELPHI)等开发平台 目前 INDY的最新正式发行版本是 版 最新BETA版本是 版 INDY 支持DELPHI DELPHI C++BUIDER C++BUIDER Kylix等版本 Kylix已经把INDY作为标准组件打包到发行包里了 而且据说DELPHI 将会把INDY作为它的INTERNET基本组件 由此可见INDY的强悍实力

看了怎么多吸引人的特性 是不是迫不及待的想得到它了?不用急 你可以随时到INDY的主页上下载一份免费的源代码来安装 INDY的网址是(// nevrona /Indy/) 主页上会公布最新的INDY消息 发表更新的源代码和相关文档 如果在开发过程中遇到什么问题 可以通过访问BORLAND公司的新闻组(news://newsgroups borland )里面的borland public delphi internet winsock和borland public cppbuilder internet两个主题来获得免费的技术支持 INDY小组会及时回答在新闻组里提出的关于INDY的问题 你也可以把使用INDY的心得技巧 发现的BUG 发表到新闻组里 为INDY的发展作出一份贡献

INDY的安装很简单 现在INDY的网站正式提供WINDOWS版本的安装程序供下载 支持Kylix的版本则包含在BORLAND公司的Kylix发行包里 不过由于BORLAND修改了一些文件的原因 导致INDY的例程都不能编译成功 所以INDY网站提供了针对Kylix修改的例程文件下载 下载了安装程序后 执行安装程序(请先把你的开发平台程序关掉) 设置好安装路径 选择好你的开发平台的种类(DELPHI或C++BUIDER)和版本 就可以了 等安装完成 打开你的开发平台程序 就可以在控件栏里发现新加的三个栏目 INDY SERVERS INDY CLIENTS INDY MISC 分别是INDY的服务器类 客户端类 杂项控件 而安装了INDY的目录里 包含有INDY的控件文件和控件源代码以及例程 你还可以在网站上下载它的帮助文件 帮助文件里包括各个控件的详细说明 是应用好INDY的必备手册

安装好INDY后 可以开始尝试INDY的新鲜好味道了 INDY提供的丰富例程就是绝好的教材 先编译几个例程 看看INDY的强大功能吧 要想熟练的使用好INDY 就得多多学习这些例程和参考帮助文件

熟悉WINSOCK编程的读者一定会觉得奇怪吧 为什么INDY是是完全基于SOCKET阻塞工作模式的呢?异步模式(非阻塞模式)是WINSOCK的一大特点 为什么不用呢?

其实 之所以大多数WINDOWS下的INTERNET程序都使用异步模式 这和WINSOCK的历史有关 当WINSOCK被移植到WINDOWS的时候 当时的WINDOWS *** 作系统还是WINDOWS 而WINDOWS 是不支持多线程的 不象UNIX下可以使用FORK来运行多进程 在WINDOWS 下 如果使用阻塞模式 在通讯时会锁定用户界面使程序没有响应 为了避免这种情况 WINSOCK就引入异步模式这个新特性 而使用异步模式来编制INTERNET程序也就成了WINDOWS程序员的经典教条 但是 随着新的WINDOWS *** 作系统的出现 如WINDOWS NT ME 等 这些 *** 作系统开始支持多线程 异步模式这个教条仍然深入人心 使很多程序员会下意识的拒绝使用阻塞模式

事实上 UNIX下的SOCKET只支持阻塞模式(现在UNXI的SOCKET有了一些新的非阻塞特性 不过绝大多数应用仍然使用阻塞模式) 阻塞模式具有以下几个比异步模式优越的特点

编程更简单 可以把所有处理SOCKET的代码放在一起 顺序执行 而不用分散在不同的事件处理代码段里

更容易移植到UNIX 使用INDY的DELPHI程序 可以不做太多(甚至不做)修改 就可以把WINDOWS的DELPHI源代码拿到LINUX下 用Kylix来编译成LINUX下的网络程序

更容易在多线程程序里使用 由于阻塞模式的代码可以放在一起 可以很方便的把这些代码包裹在线程里面来使用 而不象异步模式 需要针对不同的事件 设置不同的处理代码

为了兼顾简单可靠和高效 INDY是基于阻塞模式工作的 阻塞模式需要等待任务完成才返回 这样 当主线程里调用阻塞任务运行时 程序不能处理用户界面的消息 INDY提供了一个控件TidAntiFreeze来解决这个问题 只要在你的程序里 简单的填加一个TidAntiFreeze控件到任何地方(随便往FORM上放) 不需要写任何代码(最多把超时时间改一下) 就可以很好的解决用户界面不响应的问题

下面有两段示范代码 可以看出INDY控件的程序代码和其他使用异步模式的Internet控件的程序代码相比 是多么的简洁

代码一 INDY控件的程序代码(IndyClient代表INDY控件的一般形式)

with IndyClient do begin

Connect

Try

// 在这里写入你的处理代码

finally

Disconnect

end

end

代码二 其他控件的程序代码(SocketComponent代表一般的Internet控件)

procedure TFormMain TestOnClick(Sender: TComponent)

begin

with SocketComponent do begin

Connecttry

while not Connected do begin

if IsError then begin

Abort

end

Application ProcessMessages

OutData := Data To send

while length(OutData) >do begin

Application ProcessMessages

end

finally Disconnectend

end

end

procedure TFormMain OnConnectError

begin

IsError := True

end

procedure TFormMain OnRead

var

i: Integer

begin

i := SocketComponent Send(OutData)

OutData := Copy(OutData i + MaxInt)

end

lishixinzhi/Article/program/Delphi/201311/25074


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7882068.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存