Comunicação de Java Sockets com Winsock (Visual Basic)

4 respostas
H

Olá a Todos. Estou criando um programa em Java que se comunicará com um outro software desenvolvido em Visual Basic com o uso de Winsock.

Li através deste portal mesmo que a comunicação entre os dois é “compatível”.

Eu envio uma mensagem neste código Java para o Servidor e aplicação recebe corretamente e retorna outra mensagem, porem, eu meu código Java a conexão fica aparentemente travada e não recebe a string de resposta. Verifiquei por debugs que o programa em Visual Basic já enviou o retorno.

Percebi que quando paro o programa java eu recebo a string de resposta do Servidor. Gostaria de saber se existem falhas no meu código ou se há mesmo esta incompatibilidade entre o Winsock e o Java Socket.

Logo abaixo estou encaminhando o código fonte do meu programa em Java

import java.io.*;
import java.net.*;

public class Cliente {

   public static void main(String[] args) {
      try{
         //criação e conexão do Socket
         Socket conexao = new Socket("127.0.0.1", 2001);

         //objetos de entrada e saída
         //BufferedReader entrada = new BufferedReader(new InputStreamReader(conexao.getInputStream()));
         DataInputStream entrada = new DataInputStream(conexao.getInputStream());
         PrintStream saida = new PrintStream(conexao.getOutputStream());



         //send message to server
         saida.println("Estou enviando esta mensagem");

         String linha = "";

         //read message from the server
         while(true) {
            //linha = entrada.readLine();
            linha = entrada.readLine();
            //mostra no console a mensagem de resposta do Servidor
            System.out.println("Linha: '" + linha + "'");

            if (linha == null) {
               System.out.println("Socket Desconectado");
               break;
            }
         }
      }catch(Exception ex) {
         System.out.println("Erro: " + ex);
      }
   }
}

Obrigado a Todos,

Higor

4 Respostas

I

Kra eu tive um problema desses… mas tanto o server qto o cliente era em java…

mas acontecia isso… pois qdo o Server enviava algo pro cliente… eu tinha eskecido de dar o flush()…

depois q coloquei o flush funcionou norma…

naum sei se em VB tem essas coisas…

mas era mais ou menos isso…
saida.flush();

basicamente é pra avisar q naum vai mandar mais nada!!!

M

Bom, pelo que percebi, você usa um readLine e das duas uma:
1 - Ou ele fica esperando pelo retorno de carro/avanço de linha que você não envia; ou
2 - Ele envia tudo num array de bytes.

Ou ainda uma terceira: Você envia em bytes e tenta ler em string. Procurando por \r\n, ele não vai encontrar por que tudo estará em formato de array de bytes…

A comunicação via socket costuma ser de mais “baixa plataforma”, sendo assim, se você enviar em bytes e receber em bytes, você garante a corretitude e compatibilidade do seu sistema…

Recebendo a mensagem em bytes (na verdade em um array de bytes) você pode convertê-lo para String (utilizando o construtor da classe String) e imprimir a mensagem que você recebeu.

Não deixe de postar se conseguiu! :slight_smile:

Att

H

Meu problema provavelmente enquadra-se na terceira opção, pois realmente a aplicação servidora não envia /n. Como poderia estar lendo estas informações num array de bytes e transformando numa String?

H

Obrigado pela ajuda de todos. Funcionou com a solução do nosso colega de criar um array de bytes e depois converter para uma nova String.

Criado 20 de agosto de 2004
Ultima resposta 25 de ago. de 2004
Respostas 4
Participantes 3