使用TIdTCPClient向TIdTCPServer传送结构数据,请教如何才能把一个TSMSConnect结构的数据传到服务器端。本人不熟悉使用Indy10,求高手帮忙!!
TSMSHead = packed record
SequenceID : Integer;
CommandID : Integer;
TotalLength : Integer;
end;
PSMSHead = ^TSMSHead; TSMSConnect = packed record
Head : TSMSHead;
UID : array[0..19] of char;
PWD : array[0..19] of char;
Version : Byte;
end;
PSMSConnect = ^TSMSConnect;
TSMSHead = packed record
SequenceID : Integer;
CommandID : Integer;
TotalLength : Integer;
end;
PSMSHead = ^TSMSHead; TSMSConnect = packed record
Head : TSMSHead;
UID : array[0..19] of char;
PWD : array[0..19] of char;
Version : Byte;
end;
PSMSConnect = ^TSMSConnect;
解决方案 »
- 为什么代码只能看不能修改??
- 关于数据库文件路径的问题,紧急求救!
- ApplyUpdates(0)提交服务器会报错
- delphi datasnap 在远程模块TDSServerModule中可以获取连接信息吗?
- delphi 主从表的数据增删改查
- 请教怎样在应用程序服务器端监控客户端的行为!请大家给个好的思路!
- Access数据库问题。
- 前天去大面试,那公司要我写一个技术文档给他,但我没写过,不知道怎么写,哪位大虾知道的能否过来说一下!在线等!!!
- 怎么在delphi里画一条与某一条直线垂直的线啊
- Trichedit控件中如何输入表格?
- 我想把一幅黑白图用8×8的【0,1】矩阵来表示,白的用0,黑的用1
- 关于UDP指定源端口发送数据包
IdTCPClient1.IOHandler.Write(PSMSConnect^);
C:TSMSConnect;
P:PIdBytes;....
C.Head.SequenceID := htonl(CreateID);
C.Head.CommandID := htonl(CMD_CONNECT);
C.Head.TotalLength := htonl(SizeOf(TSMSConnect));
strpcopy(C.UID,PChar('lfpsoft'));
strpcopy(C.PWD,PChar('lfpsoft'));
C.Version := SMS_VERSION_10; P:=@C; // DM.IdTCPClient.Socket.Write(buf^);
DM.IdTCPClient.IOHandler.Write(P^)
var
C,D:TSMSConnect;
P:TBytes;begin
C.Head.SequenceID := htonl(CreateID);
C.Head.CommandID := htonl(CMD_CONNECT);
C.Head.TotalLength := htonl(SizeOf(TSMSConnect));
strpcopy(C.UID,PChar('lfpsoft'));
strpcopy(C.PWD,PChar('lfpsoft'));
C.Version := htonl(SMS_VERSION_10);
CopyMemory(@P,@C,SizeOf(C));
DM.IdTCPClient.IOHandler.Write(P);
9是这样写,10没用过
应该是 CopyMemory(@P, @C[0], SizeOf(C));以下是我的完整代码:procedure TForm1.btn1Click(Sender: TObject);
var
pkt: TSMSConnect;
buf: TBytes;
begin
// 填写pkt
pkt.Head.SequenceID := 1000;
pkt.Head.CommandID := 119;
StrLCopy(pkt.UID, 'I love you', SizeOf(pkt.UID));
// ... // 准备缓冲区数据
SetLength(buf, SizeOf(TSMSConnect));
Move(pkt, buf[0], SizeOf(TSMSConnect)); tcpClient.Connect;
tcpClient.Socket.Write(buf);
tcpClient.Disconnect;
end;procedure TForm1.tcpServerExecute(AContext: TIdContext);
var
pkt: PSMSConnect;
buf: TBytes;
begin
SetLength(buf, SizeOf(TSMSConnect));
AContext.Connection.Socket.ReadBytes(buf, SizeOf(TSMSConnect), False); pkt := PSMSConnect(@buf[0]);
Assert(pkt.Head.SequenceID = 1000); mmo1.Lines.Add(pkt.UID);
end;
CopyMemory(@C[0], @P, SizeOf(C));