Fórum Conexão com TIdTCPServer e TIdTCPClient #346201
18/09/2007
0
Para o cliente receber uma mensagem do servidor coloquei um timer fazendo Memo1.Lines.Add(TIdTCPClient.RealdLn()). Porém o sistema tranca, e fica esperando uma mensagem do servidor. Quando o servidor manda a mensagem o memo é atualizado, porém continua trancado.
Alguem sabe como fazer para que a aplicação não fique trancada?
Lperosa
Curtir tópico
+ 0Posts
18/09/2007
Rodrigo_koga
Tenta explicar em mais detalhes o q vc precisa e o q vc quer dizer com ´tranca´, ele fica em stand-by esperando algum retorno do servidor, e pq vc usou um Timer???
Pelo q parece q vc esta querendo fazer um programa de comunicação é isso?
Caso seja existem exemplos onde vc pode ver como eh feito...
Outra coisa com relação a trancar acho q vc podia dar uma olhada no seu codigo pq alguma coisa esta bem estranha...
Posta ai qq coisa...
Flw...
Gostei + 0
18/09/2007
Massuda
O modelo cliente/servidor do Indy baseia-se na idéia de que o cliente sempre toma a iniciativa no processo de comunicação, nunca o servidor inicia uma comunicação.
Como o Indy usa comunicação síncrona (bloqueia a thread até completar a operação de escrita/leitura), a solução que você usou sempre vai ´trancar´ o programa.
Dê uma olhada :arrow: [url=http://forum.devmedia.com.br/viewtopic.php?t=70214]neste tópico[/url], talvez te ajude.
Gostei + 0
18/09/2007
Lperosa
Gostei + 0
18/09/2007
Massuda
Msg := IdTCPClient1.ReadLn(´´, 5);
Memo1.Lines.Add(TIdTCPClient.RealdLn()).
Gostei + 0
18/09/2007
Lperosa
Gostei + 0
18/09/2007
Lperosa
Dei uma lida neste tópico. Mas se for fazer desta mandeira, usando o componente Server no cliente e o Client no servidor, não seria mais lógico usar a conexão UDP?
Gostei + 0
18/09/2007
Massuda
Gostei + 0
18/09/2007
Lperosa
Se vc olhar, me manda a resposta depois.
É o seguinte, a aplicação que tenho q fazer preciso executar tarefas tanto no servidor qto no cliente, cfe. as mensagens que os dois mandarem entre sí. Queria fazer por TCP pq tenho a relação de clientes conectads no servidor no proprio componente. Se fizer aquele esquema de client no servidor e server no cliente, não tenho mais essa lista pois será uma conexão de um para um. Então não seria mais lógico usar a UDP, pois com essa conexão eu enviaria mensagens sem precisar de confirmação.
Gostei + 0
18/09/2007
Massuda
Gostei + 0
19/09/2007
Lperosa
Mas senão, tranca após o client receber as mensagens server qdo conecta.
Gostei + 0
19/09/2007
Massuda
Seria interessante você atualizar seu Indy. Baixe o Indy 9.0.18 :arrow: [url=http://www.indyproject.org/Sockets/Download/Files/Indy9.en.aspx]desta página[/url]; essa é a última versão 9 oficial; existe outra ´não-oficial´, mais recente, que você pode obter via CVS ou de um dos sites de snapshot do Indy. Instruções para instalação, você encontra no meio :arrow: [url=http://forum.devmedia.com.br/viewtopic.php?t=57069]deste tópico[/url].
Gostei + 0
19/09/2007
Lperosa
Sim, estou usando a que veio com o delphi, Delphi 7.
Vou tentar baixar essa 9.0.18. Mando a resposta depois.
Gostei + 0
19/09/2007
Lperosa
Massuda, só instalei a versão 9.0.18 e funcionou.
Valeu.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)