TCP 서버를 만들고 클라이언트에게 메시지를 보내고 싶습니다. 필요에 따라 TCP 서버의 OnExecute 이벤트가 아닙니다.OnExecute 이벤트가없는 TCPserver
메시지 보내기/받기에 문제가 없습니다. 나는 그것을 좋아한다 :
procedure TFormMain.SendMessage(IP, Msg: string);
var
I: Integer;
begin
with TCPServer.Contexts.LockList do
try
for I := 0 to Count-1 do
if TIdContext(Items[I]).Connection.Socket.Binding.PeerIP = IP then
begin
TIdContext(Items[I]).Connection.IOHandler.WriteBuffer(Msg[1], Length(Msg));
// and/or Read
Break;
end;
finally
TCPServer.Contexts.UnlockList;
end;
end;
참고 1 : OnExecute를 사용하지 않으면 클라이언트가 연결할 때 프로그램에서 예외가 발생한다.
참고 2 : 아무 것도하지 않고 OnExecute를 사용하면 CPU 사용량이 % 100으로 이동합니다.
참고 3 : TCP 클라이언트를 변경할 기회가 없습니다.
그럼 어떻게해야합니까?
'OnExecute'는 클라이언트 요청에서만 호출되지 않습니까? – jpfollenius
아니요. 'OnExecute'는 연결 수명 동안 연속 루프에서 호출됩니다. –