Lazarus中文社区

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

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
楼主: pcplayer

记录:Ubuntu 下用 Lazarus 开发 Linux 服务器程序

[复制链接]

该用户从未签到

 楼主| 发表于 2012-7-4 18:43:39 | 显示全部楼层
IdUDPServer.Send can not send out package in Lazarus under Ubuntu, trace the problem into here:

function TIdMBCSEncoding.GetCharCount(Bytes: PByte; ByteCount: Integer): Integer;
{$IFDEF USE_ICONV}
var
  LChars: array[0..3] of WideChar;
  LBytesPtr, LCharsPtr: PAnsiChar;
  LByteCount, LCharsSize: size_t;
{$ENDIF}
begin
  {$IFDEF USE_ICONV}
  // RLebeau: iconv() does not allow for querying a pre-calculated character count
  // for the input like Microsoft does, so have to determine the max characters
  // by actually encoding the Ansi data to a real buffer.  We'll encode to a
  // small local buffer so we don't have to use a lot of memory...
  Result := 0;
  LBytesPtr := PAnsiChar(Bytes);
  LByteCount := ByteCount;
  while LByteCount > 0 do
  begin
    LCharsPtr := PAnsiChar(@LChars[0]);
    LCharsSize := SizeOf(LChars);
    //Kylix has an odd definition in iconv.  In Kylix, __outbytesleft is defined as a var
    //while in FreePascal's libc and our IdIconv units define it as a pSize_t
    if iconv(FToUTF16, @LBytesPtr, @LByteCount, @LCharsPtr, {$IFNDEF KYLIX}@{$ENDIF}LCharsSize) = size_t(-1) then
    begin
      Result := 0;  //goto here, so, encoding convert fail.by pcplayer
      Exit;
    end;
    // LBufferCount was decremented by the number of bytes stored in the output buffer
    Inc(Result, (SizeOf(LChars)-LCharsSize) div SizeOf(WideChar));
  end;
  {$ELSE}
    {$IFDEF WINDOWS}
  Result := MultiByteToWideChar(FCodePage, FMBToWCharFlags, PAnsiChar(Bytes), ByteCount, nil, 0);
    {$ELSE}
  ToDo('GetCharCount() method of TIdMBCSEncoding class is not implemented for this platform yet'); {do not localize}
    {$ENDIF}
  {$ENDIF}
end;
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-7-6 13:28:22 | 显示全部楼层
精神可嘉!
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2012-7-9 13:04:04 | 显示全部楼层
在Linux Lazaurs 里面使用 Indy10 IdTCPServer 注意:
1. Project Option 的 Other 里面需要加上参数: -dUseCThreads

2. 必须增加 Binding,而不是像 Delphi 底下,设置个 DefaultPort 就可以。如果只设置 DefaultPort 则打开时会提示说该端口已经被系统占用。

3. 增加 Binding 时,该 Bind.IP 可以设置为空。网上有人说用 IdStack.GStack.LocalAddress 可以获取本机IP,在这里获取到的是空字符串,也就是没有获取到。



然后,可以打开 IdTCPServer 并且可以收到数据和发送数据了。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2012-7-15 17:25:18 | 显示全部楼层
这几天在折腾服务器的事。又在通知我说服务器备案什么的了。必须尽快把服务器上的几个 BBS 转移。那几个 BBS 是当年 .net 1.1 的时候为学习 .net 我自己用 delphi 写的asp.net,数据库当然是用的和 delphi 配合比较好的 Firebird2.0。

现在要在 Ubuntu 上跑,为节省资源,估计还是得改用 PHP,因此搜索了一下,决定采用 phpbb。这两天都在折腾如何在 Ubuntu 上安装 phpbb,并且要把数据库设置为 Firebird 而不是默认的 Mysql。到目前为止基本完成。

然后可以继续实验在 Ubuntu 底下用 Lazarus 写程序了。

至于 WEB,突然想到可以用 Lazarus 写基于 ExtJS 的 web 应用!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-7-16 08:13:24 | 显示全部楼层
试一试    :http://www.raudus.com/download/


Download

Raudus 0.8.9 is available. June 1, 2012.
The installer package contains the framework, examples, ExtJS 4.0.7, SenchaTouch 1.1.1, and RFE 0.8.9 (javascript library for RaVCL controls).

Raudus 0.8.9 for Windows:

raudus-0.8.9-windows.exe (59 MB)
MD5: 8cb6a1ed260d41bed6d9a3fe48048be3
Requirements: Delphi 7..XE2 or Lazarus 0.9.30.2

Raudus 0.8.9 for Linux:

raudus-0.8.9-linux.tar.gz (19 MB)
MD5: 527668f0a772ada63488c7e0e937af63
Requirements: FreePascal 2.4.4 or Lazarus 0.9.30.2
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2012-7-23 00:29:03 | 显示全部楼层
楼上的,多谢。有时间我会试试。
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-8-31 09:31:05 | 显示全部楼层
楼主能分享下你用的那个CodeTyphon吗?先谢了:)
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2012-10-10 09:09:31 | 显示全部楼层
非常实用,谢谢!
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2012-10-11 13:15:48 | 显示全部楼层
好长时间没做如何在 LINUX 底下的 LAZARUS 的实验了。

最近在 DELPHI 底下做一个项目,发现 Indy10 有严重的问题,非常不稳定。

用 Delphi 2010 / XE /XE2 的 Indy TCP Client 去访问一个 TCP SERVER,持续下载一个二进制流,没问题。但如果同时这个  TCP Client 向 Server 发送二进制流,则会导致下载的流出现丢数据的现象。原因不明。

在 D7 上采用 Indy9.018 没发现类似现象。

所以在 Lazarus 上面采用 Indy 的人也要小心了。
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2012-10-11 13:18:52 | 显示全部楼层

回 16楼(herocai) 的帖子

herocai:楼主能分享下你用的那个CodeTyphon吗?先谢了:) (2012-08-31 09:31) 
我就是用在其官网下载的最新版本。
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

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

GMT+8, 2025-5-2 10:51 , Processed in 0.116091 second(s), 6 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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