1. Indy在active:=True的时候报错;根据追踪代码发现是在多线程的时候出错,做测试,空应用程序,在窗体创建时直接创建线程,报错,网上查找后发现,应该在“工程”à“工程选项”à “编译选项”à “其余的”à “自定义选项”的框里添加“-dUseCThreads”;
2. Linux下使用Indy和Windows下略有不同
- Windows:
- IdTCPServer.DefultPort:=12345;
- IdTCPServer.Active:=True;
- Linux:
- IdTCPServer.Bindings.Add.IPVersion := Id_IPv4;
- IdTCPServer.Bindings.Add.IP:=IP;
- IdTCPServer.Bindings.Add.Port:=Port;
- IdTCPServer.Active:=True;
复制代码 Indy出现乱码,无论在Linux下或者Windows下:
如下解决:
- aCMD:=AContext.Connection.IOHandler.ReadLn(enUTF8);
- AContext.Connection.IOHandler.WriteLn(aCMD,enUTF8);
复制代码 3. 安装CodeTyphon2.5的时候,发现Small IDE可以编译,Big IDE无法编译,原因查明,是因为OpenGL控件的原因,缺少两个系统包:
gtkglext-devel-1.2.0-11.el6.x86_64.rpm
gtkglext-libs-1.2.0-11.el6.x86_64.rpm
4. 最终生成的程序用xxx –r的方式来运行,但是这个还不是守护程序,我使用了sh的方式来实现守护程序(启动指令后面加一个”&”,就是守护程序的启动方式,这个方式不专业,权当抛砖引玉),sh代码如下:- #!/bin/sh
-
- RETVAL=0
- prog="FileChuanShu"
- . /etc/init.d/functions
-
- FileChuanShu=/usr/sbin/FileChuanShu
- prog=FileChuanShu
-
- _Run_File() {
- $FileChuanShu -r&
- return 0
- }
-
- start() {
- echo -n $"Starting $prog: "
- _Run_File && success || failure
- RETVAL=$?
- echo
- [ $RETVAL -eq 0 ] && touch /var/lock/subsys/FileChuanShu ||
- return $RETVAL
- }
-
- stop() {
- echo -n $"Stopping $prog: "
- killproc $prog
- RETVAL=$?
- echo
- [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/FileChuanShu
- return $RETVAL
- }
-
- restart() {
- stop
- start
- }
-
- case "$1" in
- start)
- start
- ;;
-
- stop)
- stop
- ;;
-
- restart)
- restart
- ;;
- *)
- echo $"Usage: $0 {start|stop|restart}"
- esac
- exit $?
复制代码 5. 关于Lazarus编译出来文件太大的问题,我直接删除了调试信息,小了N多。
6. 在文件传输的时候,用delphi xe编写客户端,发现WriteLn和ReadLn的时候,中文出现乱码,调试两天发现,lazarus下的indy10如果加参数enuft8的话,会强制转换一次,这样的话,delphi的传递过去就是错误的编码,最终,lazarus的程序全部去掉enutf8的参数,改为不传递,delphi的传递的时候加入,结果,奇迹发生了,没有乱码了,具体看代码,俺也说不清楚; 注:Scientific Linux 6.2和CentOS 6.2,Oracle Linux 6.2其实是一个东西,都有一个共同的爹,叫小红帽; 至此Scientific Linux 6.2+CodeTyphon2.5(Lazarus)+Indy 10.2编写的服务端和Scientific Linux 6.2+CodeTyphon2.5(Lazarus)+Indy 10.2编写的客户端还有windows7+Delphi XE+Indy 10.5编写的客户端之间传递文件正常,服务端以守护程序的模式打开,linux下的守护模式和windows下的服务差不多,反正就是后台运行,另外说明一下,liunx下“命令”后面加“&”运行是后台运行,不占用终端;另外就是渔夫老大说这个服务的速度问题,因为每传输一次都要打开一下文件,定位,所以并发数大的话,会拖垮服务器,但是俺的需要断点续传,还没有考虑好解决方案,有好想法的快点回贴啊。
|