Edição do Mês
|
|
Edição do Mês
|
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
Sanses Membro Senior

Registrado em: Domingo, 2 de Fevereiro de 2003 Mensagens: 547
|
Enviada: Seg Jul 12, 2004 1:31 am Assunto: desconexão de sockets |
|
|
Olá pessoal...
Como no outro tópico foi bem discutido, procurei fazer algo dentro do que foi exposto, porém está ocorrendo um erro. No servidor, coloquei uma estrutura assim:
C?o: |
type
PCliente = ^TCliente;
TCliente = record
Nick: String[30];
Socket: TCustomWinSocket;
Texto: String;
cod : string;
tempo : string;
pi : string;
|
onde armazeno os dados dos clientes que se conectam ao sistema. A estrutura recebe em pi o valor 'PING', no evento on conect do serversocket. Tenho tb um timer que de 30 em 30 segundos dispara a verificação:
C?o: |
var
i : integer;
Cliente : PCliente;
begin
timer2.Enabled:=false;
with servidor.Socket do
begin
for i:=0 to activeConnections -1 do
if Connections[i].Connected then
begin
Cliente:=Connections[i].data;
if Cliente^.pi <> 'PING' then
begin
dispose(cliente);
cliente^.Socket.Data:=nil;
end;
end;
end;
with servidor.Socket do
begin
for i:=0 to activeConnections -1 do
if Connections[i].Connected then
begin
Cliente^.pi:='';
cliente^.Socket.SendText('PONG#');
end;
end;
timer2.Enabled:=true;
end;
|
no primeiro bloco faço um loop em todas as conexões ativas para ver se alguma delas está com o valor diferente de ping, e se tiver libero a conexão. Já no segundo bloco faço novamente um loop de todas as conexões que continuam ativas e apago o valor de cliente^.pi e logo em seguida envio a todos o comando 'PONG#' que ao chegar ao cliente retorna novamente o valor ping a minha estrutura. Até aqui tudo bem na proxima vereficação o cliente que não responder será desconectado, o problema é que depois de alguns minutos rodando, gera uma access violation, e não consegui debugar pra saber de onde é pois na máquina que desenvolvi funcionou, gerou erro quando estava com várias máquinas conectadas.
Alguem tem idéia do que pode estar errado, pois eu não consegui encontrar o problema.
Grato pela atenção
Sanses _________________ ======================
"Programadores são ferramentas que transformam cafeína em código" - Autor Desconhecido... |
|
Voltar ao Topo |
|
 |
Estudante Corrupto Novato
Registrado em: Domingo, 13 de Setembro de 2009 Mensagens: 3
|
Enviada: Qui Set 24, 2009 4:41 pm Assunto: |
|
|
Alguém me explica como que faz pra gravar em uma variavel do tipo record o nick...
O usuario passa por socket o dado de nick, por exemplo, mas como que eu gravo no record especifico daquele usuario??
E outra duvida, se um usuario quer enviar para outro usuario, como que ele vai identificar quem eh o outro usuario? |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibído. Responder Tópicos Proibído Editar Mensagens: Proibído. Excluir Mensagens: Proibído. Votar em Enquetes: Proibído.
|
|