TMemoryStream
을 통해 간단한 클라이언트 및 서버 수신/전송 데이터를 쓰려고했습니다. 클라이언트의 버튼을 누를 때 btnTestClick
오류가 발생합니다. Access violation at address 005D5581 in module 'Client.exe'. Write of adress 00000000
. 내가 뭘 잘못 했니?델파이의 서버에 대한 액세스 위반
Btw 클라이언트 서버 연결이 정상적으로 작동합니다. 얇은 사다리꼴 IdTCPClient1Connected
기능이 'Client Connected!'
으로 작성되었습니다.
클라이언트 코드
procedure TForm1.btnTestClick(Sender: TObject);
var
msRecInfo: TMemoryStream;
arrOf: array of Integer; i:integer;
begin
for i := 0 to 10 do
arrOf[i]:=random(100);
msRecInfo:= TMemoryStream.Create;
try
msRecInfo.Write(arrOf, SizeOf(arrOf));
idTCPClient1.IOHandler.Write(msRecInfo);
finally
msRecInfo.Free;
end;
end;
end
서버 코드
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
msRecInfo: TMemoryStream;
arrOf: array of Integer; i:integer;
begin
msRecInfo:= TMemoryStream.Create;
try
AContext.Connection.IOHandler.ReadStream(msRecInfo, -1, False);
msRecInfo.Position := 0;
msRecInfo.Read(arrof, SizeOf(arrof));
finally
memo1.Lines.Add(IntToStr(arrOf[1]));
msRecInfo.Free;
end;
//AContext.Connection.IOHandler.ReadStream(msRecInfo, SizeOf(arrOf));
//msRecInfo.Read(arrOf, sizeOf(arrOf));
end;
처음에는 arrOf 길이를 설정하지 않고 SizeOf (arrOf)를 수정해야합니다. –
왜 많은 관련성이없는 코드를 포함 시켰습니까? 당신은 이미 문제가 서버와 관련이 없다는 것을 알고 있었습니까? 문제가 btnTestClick 메소드에만 국한되어 있다는 것을 알았으므로 여기에 모두 포함시켜야합니다. –
@RobKennedy 죄송합니다, 방금 Ctrl + C를 사용했습니다. – DanilGholtsman