| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/03/2009 12:36:28
|
juarezna
Thread.start()
![[Avatar]](/images/avatar/28dcee36ddc3665d679c5e8372568a31.jpg)
Membro desde: 26/12/2006 19:36:35
Mensagens: 42
Offline
|
Olá a todos!
Estou implementando uma comunicação socket entre um site desenvolvido em java (Servidor) e uma aplicação Delphi (Cliente).
O servidor java está ok... recebe mensagens do cliente delphi sem problemas, porém, não estou conseguindo fazer com que o retorno do servidor chegue ao cliente. Segue abaixo trechos simplificados do código.
Estou utilizando Delphi 7 com o componente TClienteSocket, original do próprio delphi.
Qualquer sugestão será bem-vinda.
[]s
Juarez
public serverSocket() {
serverSocket = new ServerSocket(1000);
while (true) {
System.out.println("Socket Server inicializado.");
socket = serverSocket.accept();
System.out.println("client conectado");
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
System.out.println(in.readLine()); // recebe mensagem do cliente. funciona corretamente
out.write("msg de retorno ao cliente"); // nao funcionou. Não chega nada no socket do delphi 7
out.println("msg de retorno ao cliente"); // nao funcionou. Não chega nada no socket do delphi 7
System.out.println("Socket Server finalizado.");
}
}
procedure TfrmCliente.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
Var x: String;
begin
showmessage('Chegou mensagem do socket servidor');
...
...
Código para manipulação dos dados recebidos
...
...
end;
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/03/2009 12:41:38
|
adriano.ferranti
JavaTeenager
![[Avatar]](/images/avatar/0b3f44d9054402de39441e165a4bdfe0.jpg)
Membro desde: 27/03/2006 10:59:38
Mensagens: 181
Offline
|
tenta um
depois das linhas
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/03/2009 13:38:49
|
ricardosoares
JavaEvangelist
![[Avatar]](/images/avatar/1cc8a8ea51cd0adddf5dab504a285915.jpg)
Membro desde: 03/12/2004 09:49:13
Mensagens: 318
Localização: São Paulo, SP, Brasil
Offline
|
considere seriamente a utilização de webservices.
xfire para servir o com java e uma simples maneira de consumir pelo delphi http://www.linhadecodigo.com.br/Artigo.aspx?id=774
|
Ricardo Soares |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/03/2009 17:03:11
|
renatosilva
GUJ Master
Membro desde: 16/12/2004 17:09:19
Mensagens: 1787
Offline
|
Adiciona um componente TServerSocket na mesma porta
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/03/2009 18:25:52
|
juarezna
Thread.start()
![[Avatar]](/images/avatar/28dcee36ddc3665d679c5e8372568a31.jpg)
Membro desde: 26/12/2006 19:36:35
Mensagens: 42
Offline
|
Olá Ricardo!
Ainda estou em tempo de partir para outra solução... Pensei em webservice, mas, achei que seria mais rápido e fácil fazer com socket.
Vc acha que não é confiável utilizar socket nesse caso? Não funcionaria bem?
Valeu!!
Juarez
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/03/2009 08:14:08
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20570
Localização: Curitiba/PR
Offline
|
Para pacotes pequenos, use também o comando: Isso desabilita o algoritmo de Nagle, do próprio TCP, que une pacotes pequenos num pacote maior. Esse algoritmo foi criado para evitar sobrecarga da rede caso aplicações que trabalhem com tinigrams (pacotes minúsculos), estejam operando. O Telnet, por exemplo, antes do algoritmo, enviava um pacote TCP por letra pressionada. E imagine uma rede inteira nos anos 70/80 com pessoas usando o telnet para comunicar com seu mainframe sem esse algoritmo...
This message was edited 1 time. Last update was at 03/03/2009 08:15:37
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/03/2009 09:44:00
|
juarezna
Thread.start()
![[Avatar]](/images/avatar/28dcee36ddc3665d679c5e8372568a31.jpg)
Membro desde: 26/12/2006 19:36:35
Mensagens: 42
Offline
|
adriano.ferranti wrote:tenta um
depois das linhas
Testei o out.flush(); mas, ainda está faltando alguma coisa... Continua não chegando o retorno do servidor(Java) para o cliente(Delphi) .
Valeu!!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/03/2009 09:53:20
|
ricardosoares
JavaEvangelist
![[Avatar]](/images/avatar/1cc8a8ea51cd0adddf5dab504a285915.jpg)
Membro desde: 03/12/2004 09:49:13
Mensagens: 318
Localização: São Paulo, SP, Brasil
Offline
|
juarezna wrote:
Olá Ricardo!
Ainda estou em tempo de partir para outra solução... Pensei em webservice, mas, achei que seria mais rápido e fácil fazer com socket.
Vc acha que não é confiável utilizar socket nesse caso? Não funcionaria bem?
Valeu!!
Juarez
Não digo que socket não é confiável. Digo apenas que webservices já conta com frameworks dotados de uma certa segurança embutida e controle de acesso. Outro ponto a ser considerado é que algumas redes tem restrições a sockets puros, limitando o trafego em http/https apenas.
Quanto a rapidez do desenvolvimento, volto a recomendar um estudo do XFire e uma olhada no link demonstrando a facilidade de se consumir um webservice pelo Delphi 7.
|
Ricardo Soares |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/03/2009 10:04:55
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20570
Localização: Curitiba/PR
Offline
|
juarezna wrote:Testei o out.flush(); mas, ainda está faltando alguma coisa... Continua não chegando o retorno do servidor(Java) para o cliente(Delphi) .
Valeu!!
E o comando que eu coloquei, testou também?
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/03/2009 22:10:30
|
bergao
Smalltalk
![[Avatar]](/images/avatar/a39a3f7bad0dc61fa1c7c9738970e0e7.jpg)
Membro desde: 01/03/2009 20:06:37
Mensagens: 1
Offline
|
Juarezna, tenta usar o código que estou enviando, essa classe que ainda estou montando funciona tanto como cliente como servidor dependendo do construtor usado. Como ainda não terminei (e ainda não sei como resolver o problema) essa classe só responde a primeira conexão, se por acaso o cliente cair, é necessário reiniciar a aplicação para que volte a responder. Já deixei preparado pra responder a mensagem do mesmo jeito que receber. Alías, se conseguir resolver o problema das desconexões, me avisa!!!
This message was edited 4 times. Last update was at 03/03/2009 22:32:11
|
Existem 10 tipos de pessoas: as que entendem números binários e as que não entendem. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/03/2009 07:56:56
|
juarezna
Thread.start()
![[Avatar]](/images/avatar/28dcee36ddc3665d679c5e8372568a31.jpg)
Membro desde: 26/12/2006 19:36:35
Mensagens: 42
Offline
|
ViniGodoy wrote:Para pacotes pequenos, use também o comando:
Isso desabilita o algoritmo de Nagle, do próprio TCP, que une pacotes pequenos num pacote maior. Esse algoritmo foi criado para evitar sobrecarga da rede caso aplicações que trabalhem com tinigrams (pacotes minúsculos), estejam operando. O Telnet, por exemplo, antes do algoritmo, enviava um pacote TCP por letra pressionada. E imagine uma rede inteira nos anos 70/80 com pessoas usando o telnet para comunicar com seu mainframe sem esse algoritmo...
Olá!! Testei também o comando, mas a mensagem continua não chegando ao Delphi:
procedure TfrmCliente.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
showmessage('Chegou mensagem do socket servidor');
end;
[]s
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/03/2009 08:00:08
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20570
Localização: Curitiba/PR
Offline
|
Use o whireshark para dar uma olhada na conexão e ver se o problema é do lado do Java ou do Delphi. Está tudo certo demais para ser problema do Java.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/03/2009 08:35:12
|
Eliezer Reis
Java Ninja
Membro desde: 23/04/2006 11:21:50
Mensagens: 291
Localização: Brasil
Offline
|
Amigo,
Tenta utilizar o PrintStream do java no lugar do OutputStreamWriter para ver no quê da.
Olha, no seu cliente você precisa colocar um estrutura parecida como abaixo para ele ficar verificando "eternamente" quando chega um mensagem. Se você simplesmente der um system.out no in.readLine() pode ser que nesse momento realmente não tenha nada a exibir. Dai é bom você olhar o código bergão.
Outro detalhe, e que para seu server java suportar mais de um cliente é necessário usar Threads.
Aproveitando o topico, gostaria de tirar um dúvida. É possível ter um servidor socket em um aplicativo .war rodando em um servidor de aplicação?
Abraço
|
[]'s Eliezer Reis
SCJP
SCWCD |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/03/2009 08:43:00
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20570
Localização: Curitiba/PR
Offline
|
Você só deve usar o PrintStream se for enviar mensagens de texto.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/03/2009 16:43:21
|
jeanand
Smalltalk
Membro desde: 11/03/2009 16:42:02
Mensagens: 2
Offline
|
Acredito estar com o mesmo problema.
Este caso já foi resolvido?
|
|
|
 |
|
|