logo DevMedia  
Home Entenda o site Revistas Canais Cursos Palestras Suporte Fórum +Serviços Assine Compre Créditos

Edição do Mês
  Fórum DevMedia
Fórum de Discussão
Conheça também o NOVO fórum da DevMedia, no endereço: www.devmedia.com.br/forum
O novo fórum possui diversas vantagens! Saiba mais em
www.devmedia.com.br/articles/viewcomp.asp?comp=14726
Estamos sempre trabalhando na melhora do site como um todo! Bons códigos!
Equipe DevMedia

 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos  RegistrarRegistrar   
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 
Edição do Mês

desconexão de sockets
 
Novo Tópico   Responder Mensagem    Fórum DevMedia - Índice do Fórum -> Administração de Lan Houses
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Sanses
Membro Senior


Registrado em: Domingo, 2 de Fevereiro de 2003
Mensagens: 547

MensagemEnviada: Seg Jul 12, 2004 1:31 am    Assunto: desconexão de sockets Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar Email
Estudante Corrupto
Novato


Registrado em: Domingo, 13 de Setembro de 2009
Mensagens: 3

MensagemEnviada: Qui Set 24, 2009 4:41 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    Fórum DevMedia - Índice do Fórum -> Administração de Lan Houses Todos os horários são GMT - 3 Hours
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibído.
Responder Tópicos Proibído
Editar Mensagens: Proibído.
Excluir Mensagens: Proibído.
Votar em Enquetes: Proibído.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB