Você está na página 1de 2

Abrindo Threads vc no fica mais amarrado no evento onAccept e tb no precisa mais utilizar o evento onClientRead.

Desabilite o evento onClientRead e defina a Thread: CODE type TSock_Thread = class(TThread) private Socket :TCustomWinSocket; public constructor Create(aSocket:TCustomWinSocket); procedure Execute; override; end;

Na Implementation: CODE constructor TSock_Thread.Create(aSocket:TCustomWinSocket); begin inherited Create(true); // cria suspensa Socket := aSocket; // passa o Socket FreeOnTerminate := true; // libera automaticamente end; procedure TSock_Thread.Execute; var s:String; begin While not Terminated and Socket.Connected do begin if Socket.ReceiveLength > 0 then // evita o evento onClientRead begin s := Socket.ReceiveText; // recebe Socket.SendText(s); // envia end; Sleep(1); // evita a CPU ficar em 100% end; end;

No evento onAccept: CODE procedure TForm1.ServerSocket1Accept(Sender: TObject; Socket: TCustomWinSocket); var TST:TSock_Thread; begin TST := TSock_Thread.Create(Socket); // instancia o objeto TST.Resume; // coloca a Thread em execuo end;

Notei que vc utiliza a propriedade Connections; vale uma dica de que se um Client se desconectar de forma anormal, essa propriedade no atualizada de imediato.

Você também pode gostar