请问:Indy9移植到Indy10出现的问题

时间:2022-12-04 17:37:49
由于Indy9中的TIdAntiFreeze有些BUG,经常的死掉,以及听说在实际的使用中,INDY10更加的稳定,所以我把代码移植到Indy 10中,其他的方法还比较好做,比如ReadLn,WriteLn的前面加入Socket.就可以了,但是我在WriteBuffet这个方法中遇到了问题,在10中没有这个方法,只有一个Write,但是这个我不会用。

我的目的是,把一个结构,发送给另一端。Indy 9的代码如下:
定义:
    TUserInfo = record
        USERID: string[20]; //用户ID
        DESCRIPT: string[30]; //用户描述
        PASSWORD: string[20]; //Passwd
        SEX: string[2]; //性别                男 女
        PHS: string[40]; //小灵通
        MOBILE_TELEPHONE: string[40]; //移动电话
        TELEPHONE: string[50]; //固定电话
        IP_ADDRESS: string[20]; //IP地址(登录更新)
        COLUMN1: string[50]; //备用1
     END;

函数中的代码:
        //调用专用函数进行登录判断
            t_tRetval.iRetval := OrderToLogin(t_IXMLDoc, t_oUserInfo, t_strErrMsg);
            t_tRetval.strErrMsg := t_strErrMsg;
            t_ActClient.UserID := t_oUserInfo.USERID;

        //把用户信息返回
            AThread.Connection.WriteBuffer(t_oUserInfo, SizeOf(t_oUserInfo), true);
客户端读取:
        //系统会返回数据是否通过
        IdTCPClient1.ReadBuffer(m_oUserInfo, SizeOf(m_oUserInfo));

各位,Indy10中应该如何写呢?请指教!

6 个解决方案

#1


晕倒,没有人知道吗?帮顶一下好吗?

#2


有任吗?

#3


没用过Indy10,应该差不多吧,Write是怎么声明的呢?

#4


我没用过indy9,只用了indy10的一点儿
建议你看看《indy in depth》,这本电子书应该有讲的,网上可以搜到的

#5


不是已经回答过了吗??

>>在10中没有这个方法,只有一个Write,

应该是该为
   IdTCPClient1.SendCmd();
   IdTCPClient1.GetResponse();

IdTCPServer1.Bindings[1].Send()

这个,indy 还提供了个参数将 string 转为 tbytes 的

必须将记录体的数据转换成TIdBytes
试一下这个
function RawToBytes(const AValue; const ASize: Integer): TIdBytes;
begin
  SetLength(Result, ASize);
  Move(AValue, Result[0], ASize);
end;

#6


以后可能用得到,关注一下。

#1


晕倒,没有人知道吗?帮顶一下好吗?

#2


有任吗?

#3


没用过Indy10,应该差不多吧,Write是怎么声明的呢?

#4


我没用过indy9,只用了indy10的一点儿
建议你看看《indy in depth》,这本电子书应该有讲的,网上可以搜到的

#5


不是已经回答过了吗??

>>在10中没有这个方法,只有一个Write,

应该是该为
   IdTCPClient1.SendCmd();
   IdTCPClient1.GetResponse();

IdTCPServer1.Bindings[1].Send()

这个,indy 还提供了个参数将 string 转为 tbytes 的

必须将记录体的数据转换成TIdBytes
试一下这个
function RawToBytes(const AValue; const ASize: Integer): TIdBytes;
begin
  SetLength(Result, ASize);
  Move(AValue, Result[0], ASize);
end;

#6


以后可能用得到,关注一下。