Q&A

  • 레코드형의 통신에서..
Trec = record

tt : array[0..4] of char;

yy : array[0..4] of char;

gg : array[0..4] of char;

end;



이렇게 선언해서 구조체를 $20으로 초기화한 후 스트림으로 보내면

첫째 필드가 4문자 이하일때는 수신되기를 tt필드값만 수신되더군요.

첫째 필드가 5문자이면 그 이 다음 필드도 수신이 됩니다. 두번째 필드도

길이에 따라 세번째 필드가 수신되거나 안되거나 하구요.

이거 다 보낼려면 어떻게 해야되죠?



대신 선언을 string[5]으로 했을 경우는 첫째 필드가 4문자 이하라 하더라도

수신측에서는 다 받습니다. 단, '|1 |12 |123' 이렇게..

엉뚱한 문자 없이 순 데이타만 받아졌으면 좋겠거든요.



이거 왜 이렇죠? 좀 갈켜 주세요...



혹여.. 소스입니다.





수신..

var

hh : trec;

qq : TMemoryStream;

cc : string;

begin

qq := TMemoryStream.Create;

qq.Position := 0;

setlength(cc, numberbytes);

nmudp1.ReadStream(qq);



qq.Read(cc[1], numberbytes);

qq.Free;

end;



송신 ..

var

hh : trec;

qq : tmemorystream;



fillchar(myrec, sizeof(trec), $20);



myrec.tt := '1';//edit1.text;

myrec.yy := '12';//edit2.text;

myrec.gg := '123';//edit3.text;



qq := TMemoryStream.Create ;

qq.Write(myrec, sizeof(trec));



NMUDP1.SendStream(qq);

qq.Free;

end;



간단히 이와 같습니다요..

0  COMMENTS