아마도 Delphi 2009 이후의 Indy 10에서 유니코드 처리때문에 발생하는 문제인 것 같네요.
Ansi로 인코딩해서 보내거나 TIdBytes에 일일이 Byte 값을 대입해서 처리하면 해결될겁니다.
var
s: string;
l_Data: TIdBytes;
l_Encoding: TEncoding;
begin
IdTCPClient1.Connect;
try
// Byte
l_Data := nil;
AppendByte(l_Data, Ord(#$7F));
AppendByte(l_Data, Ord(#$80));
IdTCPClient1.IOHandler.Write(l_Data);
// ANSI Encoding
l_Data := nil;
s := #$7F#$80;
l_Encoding := TEncoding.ANSI;
AppendString(l_Data, s, -1, l_Encoding);
IdTCPClient1.IOHandler.Write(l_Data);
finally
IdTCPClient1.Disconnect;
end;
소르 님이 쓰신 글 :
: 안녕하세요.~
: indy10의 tcpserver, tcpclient 소켓 통신에서 데이터가 이상하네요;;
: delphi xe3 + indy 10이고 테스트 소스는 아래와 같습니다.~
:
: var
: asTmp: AnsiString;
: begin
: ~중략 (tcpclient 연결 등)
: asTmp := #$7F + #$80;
: IdTCPClient1.Socket.Write( asTmp );
:
:
: 뭐 특별할것도 없는 저 소스인데 전송 시 패킷은 0x7F3F 로 날라갑니다 ㅜㅜ
:
: 아무래도 0x80 이상 값이 모두 3F로 전송되는것이 signed / unsigned 문제인것 같기도 하고;;
:
: indy9에서는 이상이 없는데 10에서는 안되네요;;
:
: 혹시 해결방법 아시는분 답글 부탁드려요.~
:
: 아~ iohandler.write도 동일하게 0x7F3F로 날라갑니다.
|