Ir para conteúdo
Fórum Script Brasil
  • 0

Tserversocket


Guest AnaBh

Pergunta

Pessoal,

No C++ Builder, eu criei um ServerSocket utilizando o objeto padrão TServerSocket do mesmo.

Dentro de uma Thread eu coloquei o seguinte codigo:

void SendBuffToClientsTcp(BYTE *Buff, int Tam)

{

int i;

Form->ServerSocket1->Socket->Lock();

for(i=0;i<Form->ServerSocket1->Socket->ActiveConnections;i++)

{

Form->ServerSocket1->Socket->Connections->SendBuf(Buff, Tam);

}

Form->ServerSocket1->Socket->Unlock();

}

Esta função está utilizando o metodo Lock() e Unlock() porque está dentro de uma thread (Assincrona). Esta função está sendo chamada varias vezes por segundo.

Quando desconecto pelo cliente, o programa servidor trava. Notei que varias vezes que ele trava, é que a desconecção aconteceu entre o for e o SendBuff. Só que estas funções no builder são atomicas, não sei como fazer para consertar isso.

Se algum puder me ajudar, ficarei muito grata.

Valeu

Ana

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Veja essa parte aqui:

for(i=0;i<Form->ServerSocket1->Socket->ActiveConnections;i++)
{
  Form->ServerSocket1->Socket->Connections[i]->SendBuf(Buff, Tam);
}

É só uma palpite, mas ActiveConnections não irá ser alterado a medida que os clientes forem sendo desconectados? Se for esse o caso, pode acontecer dele ser 0 (nenhuma conexão) e "i" ser um outro valor maior que 0, certo? Caso positivo, acredito que o código entraria em um loop infinito, não? unsure.gif

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - AnaBh -

Muito Obrigado, pela atenção.

É no momento que ocorre a desconexão que trava, e é gerado um erro no executavel.

O problema é que não tem como bloquear isso depois que o metodo SendBuffer foi chamado.

Abraços

Ana

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...