1. 구조체 한개는
TStream을 이용하면 아주 쉽습니다.
스트림에 쓰고 소켓으로 전달하면 됩니다.
바이트형식이라고 말씀하시는 형식으로 전달됩니다.
<예제>
var
strm : TMemoryStream;
begin
strm.Write(myrecTemp, Sizeof(TMyREC) );
idtcpclient1.IOHandler.Write(strm); // 설명용 코드로 실제 구현되지 않습니다.
end;
만약 Array of TMyREC 처럼
구조체 배열인경우는 for문 돌리면서 각 배열의 구조체를 보내시면 됩니다.
-------------------------------------------
2. 자바쪽이 아주 큰 문제입니다.
C나 델파이등은 구조체 그대로 소켓에서 받으면 끝나는데
자바에는 구조체가 없으므로 직접 수신받은 내용을 쪼게서 변수에 직접 대입해야 합니다.
주의해야 할점이 또 있습니다.
1) 델파이와 자바의 int, float등의 사이즈는 다를 수 있다.
2) 자바쪽 CPU의 종류에 따라 리틀엔디안-빅엔디안 차이로 각 바이트를 읽는 순서를 맞추어야 합니다.
3) 스트링의 경우 인코딩 처리가 필요합니다.
-------------------------------------------
3. 그래서 속도가 민감하지 않다면 그냥 ASCII(문자열)로 던지고 자바쪽에서 직접 컨버팅하는게 가장 쉽습니다.
<델파이>
idtcpclient1.iohandler.writeln(Col1);
idtcpclient1.iohandler.writeln(Col1);
idtcpclient1.iohandler.writeln(IntToStr(Col3));
<자바> // 설명용 코드로 작동하지 않습니다.
scol1 = sock.readstring("\r\n");
scol2 = sock.readstring("\r\n");
scol3 = sock.readstring("\r\n").toInteger();
첫눈 님이 쓰신 글 :
: 질문을 너무 자주 하는 듯 하여 죄송합니다.
:
: type
: TMyREC = Record
: Col1 : string[20];
: Col2 : string[20];
: Col3 : Integer;
: end;
:
: var
: MyREC : Array of TMyREC;
: begin
: ....
: ....
: End;
:
: 이런 형식의 Array of Record를 idTCP로 전송하여 JAVA에서 수신하여
:
: Col1 Col2 Col3
: -----------------
: aaa bbb 1000
: ccc ddd 2000
: eee ffff 3000
: -----------------
:
: 이렇게 보여주려 하는데요.
:
: 1.
: Array of Reocrd를 어떻게 Byte형식으로 바꾸어야 할지
:
: 2.
: Byte형식의 데이터를 JAVA에서 어떻게 레코드 배열 형식으로 바꾸어야 할지 모릅니다.
:
: 도움 부탁드립니다.
:
:
|