아래코드에서 잘못된 부분좀 지적해주세요
SendBuff 시 데이타가 전부 전송이 안되나봅니다.
<!--CodeS-->
var
SendBuff : PSendBuff;
TempChar : Pointer;
if ClientSocket.Active then
begin
GetMem(TempChar , VSendStream.Size);
CopyMemory(TempChar , VSendStream.Memory , VSendStream.Size);
New(SendBuff);
SendBuff^.sdMsgNum:= MSG_VIDEODISP;
SendBuff^.sdSize := VSendStream.Size;
SendBuff^.sdBuff := TempChar;
VRecvStream.Clear;
WriteLen := VRecvStream.Write(Pointer(SendBuff^.sdBuff)^ ,VSendStream.Size);
try
VRecvStream.Position:=0;
DispJpeg.LoadFromStream(VRecvStream);
Image1.Picture.Graphic:=DispJpeg;
Image1.Repaint;
except
raise Exception.Create('Jpeg LoadFromStream Error');
Exit;
end;
ClientSocket.Socket.SendBuf(Pointer(SendBuff)^, VSendStream.Size+8);
end;
<!--CodeE-->
위 사항이라면 아래 코드는 원하는 기능을 못할겁니다.
ClientSocket.Socket.SendBuf(Pointer(SendBuff)^, VSendStream.Size+8);
sdMsgNum, sdSize 필드는 제대로 넘어갈테지만 sdBuff에는 sdBuff의 메모리 주소가 넘어가니까요... 이 다음은 넘치는 크기만큼쓰레기 값이 들어가거나, Access에러가 발생하겠죠...
PSendBuff의 sdBuff를 배열을 써서 flat하게 메모리구조를 바꾸시거나 각각의 필드들을 나눠서 보내셔야 합니다.