Escolar Documentos
Profissional Documentos
Cultura Documentos
Threads Sockets
Threads Sockets
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.