일정지 않은 크기의 String문자를 글자수 많큼 Socket으로 보낼 수 있는지요?
데이터 구조는 다음과 같습니다.
|글자수| String문자 |
이런식으로 한다면... String문자를 어떻게 구성(선언) 해야 하는지....
저의 질문은 바로 이것인데요...
동적배열을 써도.. 해결이 안됩니다..
도와주세요.. ㅠㅠ
아참..
TLCS_REQ_PORT_DIAL = Record
slot : byte;
port : byte;
channel : byte; // reserved : 0
digitLen : byte;
digitString : array of char;
end;
다음과 같은 구조로 저장해서 buffer에 move 한다음 Socket으로 전송했습니다.
slot : byte;
port : byte;
channel : byte; // reserved : 0
digitLen : byte;
digitString : array of char;
end;
이거 이렇게 해보았자 맨 마지막 필드는 실제 어레이가 아니라
그냥 포인터에요 즉 4바이트만 있어요
그리고 나중에 Setlength 해봤자 해당 레코드 밑에 메모리설정
되는것이 아닙니다.
이와같을 경우 몇가지 방법이 있는데
1. 헤더와 데이타를 나누고 나중에 합치는 스타일;
- 레코드내에 가변필드가 많을경우
2. 가변필드가 맨마지막에 있고 어느정도 한정되어 있을 경우는
맨마지막 필드를 Max(위에보니 255가 끝이네요)까지 설정하고
전송시 전송바이트 조절
2번만 이야기 할께요
type
LCS_REQ_PORT_DIAL_HEADER = Record
slot : byte;
port : byte;
channel : byte; // reserved : 0
digitLen : byte;
end;
LCS_REQ_PORT_DIAL = Record
header : LCS_REQ_PORT_DIAL_HEADER;
digitString : array[0..255] of char;
end;
.....
var
SendRecord : LCS_REQ_PORT_DIAL;
begin
TCPClient1.WriteBuffer(SendRecord, sizeof(SendRecord.header) + SendRecord.header.digitLen, .....);
end;
이런식이 나을듯 하네요.