TInfo = record
Name: string;
num: byte;
end;
위와 같이 구조체를 선언하고 Client -> Server로 보낼 때
var
Info: TInfo;
TCPClient.Connection.IOHandler.Write(RawToBytes(Info, SizeOf(Info)));
이렇게 보내고 서버의 Excute 이벤트에서 아래와 같이 받습니다..
var
Buffer: TIDBytes;
Info: TInfo;
AContext.Connection.IOHandler.ReadBytes(Buffer, SizeOf(Info));
BytesToRaw(Buffer, Info, SizeOf(Info));
이것을 메모장에 찍어보면
Memo.Lines.Add('Name: ' + IntToStr(Info.num)); // 찍힘...
Memo.Lines.Add('Name: ' + Info.Name); // 안 찍힘..
Num은 찍히는데 즉, 숫자는 잘 찍히는데 문자형은 찍히지 않고 죽어 버리는 것 같습니다.
Client에서 구조체를 못 보낸 것인지 아니면 서버에서 못 받은 것인지를 모르겠습니다.
그런데 구조체내의 변수를 모두 숫자형으로 하면 잘 됩니다. 문자형이 포함되면 안됩니다.
Buffer가 Byte형이라 그런 것으로 생각되는데 문자형이 포함된 구조체를 보내고 받는 방법은
없는지요? 여러번 시행착오 끝에 여기까지는 알아냈는데 해결방법은 찾지를 못하겠군요...
이번에 Indy를 처음 사용해 보는지라.....
조언을 부탁드립니다...
델파이2009 + Indy 10.5.7 버전이고, 구조체를 사용하지 않고 WriteLn, ReadLn를 사용하면
이상없이 잘 됩니다. 구조체를 꼭 사용하고 싶어서.....
감사합니다..
|