TInfo = record
Name: string[40];
num: byte;
end;
이렇게 Name의 Size를 지정해서 해보세요.
푸른솔 님이 쓰신 글 :
: 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를 사용하면
: 이상없이 잘 됩니다. 구조체를 꼭 사용하고 싶어서.....
:
: 감사합니다..
|