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

Serversocket


Felipedcb

Pergunta

Como eu posso fazer pro ServerSocket enviar msg para todos os ClienteSocket conectados?

to usando bem assim:

ServerSocket1.Socket.Connections[0].SendText( texto a ser enviado );

mas ele só envia a msg pro primeiro cliente q conecto, os outros não recebem.... o q devo fazer?

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0
e o que eu deveria fazer para não aparecer esse erro?

Acho que você não pegou o "espírito" da coisa... Imagine que você tem três conexões, cujos índices são 0, 1 e 2, mas você faz um "for" de 0 até 3. O índice 3 existe? Não... por isso você recebe esse erro.

Ou seja, em algum lugar aí do código você está fazendo uma iteração que extrapola o limite da coleção.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Entendi... foi com a estrutura de repetição que eu utilizei:

For i:=0 to (n-1) do

ServerSocket1.Socket.Connections.SendText( texto a ser enviado );

mas não sei como fazer pra mandar as msgs somente para o nº de cliente conectados, entendeu? Como eu posso fazer uma estrura de repetição que verifique quantos clientes estão conectados e mande a mensagem para todos eles.

Porque do jeito q eu tinha feito ele vai mandando as mensagens até terminar o número de clientes conectados, ai dá o erro.

[]'s

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Felipe,

Use essa função para pegar o nº de conexões ativas.

Tenta isso:

var n:integer;

begin
n:=ServerSocket1.Socket.ActiveConnections;
For i:=0 to n do
 ServerSocket1.Socket.Connections[i].SendText( texto a ser enviado );
end;

qualquer coisa posta ae.

Abs.

Kiko

Link para o comentário
Compartilhar em outros sites

  • 0

var n:integer;

begin

n:=ServerSocket1.Socket.ActiveConnections;

For i:=0 to n do

ServerSocket1.Socket.Connections.SendText( texto a ser enviado );

end;

Funciono assim também, porém continua aparecendo o mesmo erro quando o texto é enviado.

List index out of bounds(2)

[]'s,

Felipe

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Felipe,

n:=ServerSocket1.Socket.ActiveConnections;

Essa função vai retornar um valor (ex. 10), que seria os usuários conectados!

Se você fizer um For de 0 até n (10 no exemplo) você estará contando 11 vezes. Então você terá que contar de 1 até 10.

For i:=1 to n ....

qualquer coisa posta ae.

Abs.

Kiko

Link para o comentário
Compartilhar em outros sites

  • 0

Essa função vai retornar um valor (ex. 10), que seria os usuários conectados!

Se você fizer um For de 0 até n (10 no exemplo) você estará contando 11 vezes. Então você terá que contar de 1 até 10.

For i:=1 to n ....

qualquer coisa posta ae.

Abs.

Kiko

Continua dando a mesma coisa... =\ uq será q tah acontecendo?

[]'s,

Felipe

Link para o comentário
Compartilhar em outros sites

  • 0

Essa função vai retornar um valor (ex. 10), que seria os usuários conectados!

Se você fizer um For de 0 até n (10 no exemplo) você estará contando 11 vezes. Então você terá que contar de 1 até 10.

For i:=1 to n ....

qualquer coisa posta ae.

Abs.

Kiko

Continua dando a mesma coisa... =\ uq será q tah acontecendo?

[]'s,

Felipe

Você colocou o -1 como o Kiko sugeriu? blink.gif Aliás, você entendeu que ele sugeriu isso?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Você colocou o -1 como o Kiko sugeriu?  Aliás, você entendeu que ele sugeriu isso?

Bom, não só intendi, como coloquei tb, porem não é -1 não, é? é 1!

sei lá, se for 1 eu intedi, mas você posto -1 agora já estou me confundindo. Porquê -1?

[]'s

Felipe

Link para o comentário
Compartilhar em outros sites

  • 0

Você colocou o -1 como o Kiko sugeriu?  Aliás, você entendeu que ele sugeriu isso?

Bom, não só intendi, como coloquei tb, porem não é -1 não, é? é 1!

sei lá, se for 1 eu intedi, mas você posto -1 agora já estou me confundindo. Porquê -1?

[]'s

Felipe

Assim:

n:=ServerSocket1.Socket.ActiveConnections;
For i:=0 to n-1 do
  ServerSocket1.Socket.Connections[i].SendText( texto a ser enviado);

Supondo, é claro, que o índice comece de 0. Se começar de 1 aí é o exemplo dele mesmo. Quando aparece o erro descrito, qual o valor do índice atual? Qual o valor de "i" quando ocorre o erro?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Supondo, é claro, que o índice comece de 0. Se começar de 1 aí é o exemplo dele mesmo. Quando aparece o erro descrito, qual o valor do índice atual? Qual o valor de "i" quando ocorre o erro?

Parece que o erro ocorre logo após que o servidor envia a mensagem para todos os clientes, no caso então o valor de i na hora do erro seria igual ao número de clientes conectados. Ele envia a mensagem a fotos os clientes e dá o seguinte erro:

List index out of bounds(2)

que seria a mesma coisa que:

List index out of bounds(i)

Link para o comentário
Compartilhar em outros sites

  • 0

Supondo, é claro, que o índice comece de 0. Se começar de 1 aí é o exemplo dele mesmo. Quando aparece o erro descrito, qual o valor do índice atual? Qual o valor de "i" quando ocorre o erro?

Parece que o erro ocorre logo após que o servidor envia a mensagem para todos os clientes, no caso então o valor de i na hora do erro seria igual ao número de clientes conectados. Ele envia a mensagem a fotos os clientes e dá o seguinte erro:

List index out of bounds(2)

que seria a mesma coisa que:

List index out of bounds(i)

Aí é que está. Se o índice começar de 0 ele nunca deveria chegar ao número de clientes conectados. Se você possui 2 clientes conectados, o índices seriam 0 e 1 (ou seja, de 0 até 2-1). Isso é claro, supondo que comece de 0.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
sim... mas o erro está ocorrendo independente do valor do índice. de qualquer forma da o erro.

Então, faça um teste aí. Se você possuir somente dois clientes conectados, execute o seguinte:

ServerSocket1.Socket.Connections[0].SendText('teste1');
ServerSocket1.Socket.Connections[1].SendText('teste2');

E veja se dá erro também.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Ops... na verdade é o seguinte, se eu colocar somente essas duas linhas, como você postou aí em cima, não dá erro não, mesmo porque só tem dois clientes conectados o 0 e o 1. O problema está na estrutura de repetição.

E se você fizer:

n:=ServerSocket1.Socket.ActiveConnections;
For i:=0 to n-1 do
 ServerSocket1.Socket.Connections[i].SendText('teste');

Dá erro??? huh.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Iá... agora não está dando erro mais não, acho que eu estava fazendo alguma coisa errada por falta de atenção.

Bom... agora sim eu posso dá continuidade ao meu projeto. =]

Vlws, muito obrigado mesmo, agora da rodando certinho.

Só mais uma dúvida:

Tem como eliminar as mensagens de erro do Delphi?

eu quero colocar meus próprios erros, porém além de aparecer o meu, aparece o do Delphi também. O que eu devo fazer?

[]'s

Felipe

Link para o comentário
Compartilhar em outros sites

  • 0

Iá... agora não está dando erro mais não, acho que eu estava fazendo alguma coisa errada por falta de atenção.

Bom... agora sim eu posso dá continuidade ao meu projeto. =]

Vlws, muito obrigado mesmo, agora da rodando certinho.

smile.gif

Só mais uma dúvida:

Tem como eliminar as mensagens de erro do Delphi?

eu quero colocar meus próprios erros, porém além de aparecer o meu, aparece o do Delphi também. O que eu devo fazer?

Se você está utilizando o Try para tratar os erros é normal que o erro do Delphi apareça também. Note que ele (o erro do Delphi) só vai aparecer enquanto você estiver executando o programa dentro do ambiente do Delphi. Depois de compilado e executado externamente você só vai ver a mensagem de erro que você definiu.

Certo? wink.gif

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...