Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 8447|回复: 14

Lazarus+Linux(Scientific Linux 6.2 )+Indy10+守护程序总结

[复制链接]

该用户从未签到

发表于 2012-4-17 16:31:19 | 显示全部楼层 |阅读模式
1.       Indyactive:=True的时候报错;根据追踪代码发现是在多线程的时候出错,做测试,空应用程序,在窗体创建时直接创建线程,报错,网上查找后发现,应该在“工程”à“工程选项”à “编译选项”à “其余的”à “自定义选项”的框里添加“-dUseCThreads”;
2.       Linux下使用IndyWindows下略有不同
  1. Windows:
  2.          IdTCPServer.DefultPort:=12345;
  3.          IdTCPServer.Active:=True;
  4. Linux:
  5.          IdTCPServer.Bindings.Add.IPVersion := Id_IPv4;
  6.          IdTCPServer.Bindings.Add.IP:=IP;
  7.          IdTCPServer.Bindings.Add.Port:=Port;
  8.          IdTCPServer.Active:=True;
复制代码
Indy出现乱码,无论在Linux下或者Windows下:
如下解决:
  1. aCMD:=AContext.Connection.IOHandler.ReadLn(enUTF8);
  2. 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代码如下:
  1. #!/bin/sh
  2. RETVAL=0
  3. prog="FileChuanShu"
  4. . /etc/init.d/functions
  5. FileChuanShu=/usr/sbin/FileChuanShu
  6. prog=FileChuanShu
  7. _Run_File() {
  8.     $FileChuanShu -r&
  9.     return 0
  10. }
  11. start() {
  12.     echo -n $"Starting $prog: "
  13.     _Run_File && success || failure
  14.     RETVAL=$?
  15.     echo
  16.     [ $RETVAL -eq 0 ] && touch /var/lock/subsys/FileChuanShu ||
  17.     return $RETVAL
  18. }
  19. stop() {
  20.     echo -n $"Stopping $prog: "
  21.     killproc $prog
  22.     RETVAL=$?
  23.     echo
  24.     [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/FileChuanShu
  25.     return $RETVAL
  26. }
  27. restart() {
  28.         stop
  29.         start
  30. }
  31. case "$1" in
  32.     start)
  33.         start
  34.         ;;
  35.     stop)
  36.         stop
  37.         ;;
  38.     restart)
  39.     restart
  40.         ;;
  41.     *)
  42.     echo $"Usage: $0 {start|stop|restart}"
  43. esac
  44. 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下“命令”后面加“&”运行是后台运行,不占用终端;另外就是渔夫老大说这个服务的速度问题,因为每传输一次都要打开一下文件,定位,所以并发数大的话,会拖垮服务器,但是俺的需要断点续传,还没有考虑好解决方案,有好想法的快点回贴啊。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册(注册审核可向QQ群索取)

x

评分

参与人数 4威望 +12 收起 理由
aaa + 1 学习了!
bugxiong + 2 Lazarus社区有你更精彩!
zwz + 7 我想给你加分,爱咱咱地
逍遥派掌门人 + 2 优秀文章,支持!n神马都是浮云!

查看全部评分

回复

使用道具 举报

该用户从未签到

发表于 2012-4-17 17:40:10 | 显示全部楼层
弱弱的问一下: “守护程序” 是什么意思?
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-4-17 19:58:57 | 显示全部楼层
服务吧。???
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-4-18 11:08:00 | 显示全部楼层
弱弱的问下:“工程”à“工程选项”à “编译选项”à “其余的”à “自定义选项”,到底在哪里?

linux的守护进程,就相当于windows的服务。

我记得laz有个专门用于制作这类程序的控件包,但我不知道怎么用,也不知道支持那些系统。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-4-18 11:10:04 | 显示全部楼层
我想给你加分,爱咱咱地
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-4-18 11:11:43 | 显示全部楼层
学习,分享别人的东西就是快乐,嘿嘿嘿!!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-4-18 12:16:02 | 显示全部楼层
Lazarus社区有你更精彩!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-4-18 12:49:54 | 显示全部楼层
支持楼主!!!!!
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2012-4-19 23:11:11 | 显示全部楼层
这个程序虽然能跑起来,但是明显有问题,正在改善中,还有就是遇到了和delphi交互时中文路径乱码的问题,正在努力解决中
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-4-23 18:43:13 | 显示全部楼层

for ubuntu 的服务程序启动shell

#!/bin/sh
binpath=/home/ccx/Documents/filesrv_socket/filesrv
test -f $binpath || exit 0
. /lib/lsb/init-functions        #other linux include: /etc/init.d/functions

case "$1" in
start)
  log_begin_msg "Starting filesrv..."
  if start-stop-daemon --start --background --quiet --oknodo --exec $binpath -- -r; then
    log_end_msg 0
  else
    log_end_msg 1
  fi
  ;;
stop)
  log_begin_msg "Stopping filesrv..."
  if start-stop-daemon --stop --quiet --oknodo --exec $binpath; then
    log_end_msg 0
  else
    log_end_msg 1
  fi
  ;;
restart|force-reload)
  $0 stop
  sleep 1
  $0 start
  ;;
*)
  log_success_msg "Usage: $binpath {start|stop|restart|force-reload}"
  exit 1
esac

exit 0
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2025-7-1 08:27 , Processed in 0.053254 second(s), 13 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表