맞춤형 전함 게임에 대한 중매 서버를 만들고 있습니다. 나는 네트워크 코딩의 초보자이기 때문에, 바보 같은 질문에 대해서는 미리 유감스럽게 생각한다. : PDelphi 10. TCustomWinSocket 배열 사용시 액세스 위반
이제 주제에 더 가깝습니다. 나는 기본 델파이 서버/클라이언트 소켓 구성 요소를 사용합니다. 공공 구역 (clients: array of TCustomWinSocket;
)에서 선언 한 배열을 가지고, 메인 프레임 시동시 길이를 0으로 설정합니다 (setLength(clients, 0);
). 이제 나를 혼란스럽게하는 부분 : 배열 프로그램의 어떤 요소에 액세스하려고 할 때마다 액세스 위반 예외가 발생합니다. 어떤 방법 으로든 검사했는데 프로그램이 배열의 길이를 초과하지 마십시오.
procedure Tmain.Button1Click(Sender: TObject);
var
i: integer;
begin
for i := 0 to length(clients) do begin
if assigned(clients[i]) then begin
showmessage(IntToStr(i));
showmessage(IntToStr(i) + ': ' + clients[i].RemoteAddress);
end;
end;
end;
다른 예 :
procedure Tmain.serverClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
addLog('(' + Socket.RemoteAddress + ':' + IntToStr(Socket.RemotePort) + ') Клиент подключился');
if length(clients) <> 0 then begin
showmessage(IntToStr(length(clients)));
setLength(clients, length(clients) + 1);
showmessage(IntToStr(length(clients)));
clients[length(clients)] := Socket;
end
else if length(clients) = 0 then begin
showmessage(IntToStr(length(clients)));
clients[0] := Socket;
end;
end;
는 기본적으로, 이러한 배열을 사용할 때마다 그것이 액세스 위반을 제공
여기 예외를 발생 부호 예이다. 나는 그것을 얻을 수 없다, 나는 배열 길이에 머물도록 코드를 제한하지만, 그렇지 않다. 아니면 어쩌면 평소와 같이 어리 석음이 원인일까요?
어쨌든, 나는 정말로 도움이 될 수 있습니다.
미리 감사드립니다. :)
안녕하세요, @KenWhite ! 대답 해줘서 고마워요! 문제가 발생하지 않고 0 요소가 존재하기 전에 프로그램을 테스트 할 때 액세스 위반을 일으키기 시작한 후 0 인덱스를 다시 사용하지 않으려 고 시도했습니다. 과거에이를 사용했기 때문에 이제 해결책을 찾았습니다. 다시 작동합니다. 나는 너무 혼란 스럽다 ...하지만 도움에 다시 한번 감사드립니다! –
내 대답보기; 게시 한 코드에 다른 문제가 있습니다. –