Socket Recebendo resposta(100 % - Consegui, valeu galera...)

Caros amigos,

Criei um projeto onde estou tentando enviar um uma string para um socket e receber uma resposta.
Acho que consegui enviar a string, mas não consigo receber a resposta.
O que eu estou fazendo de errado? :?:
Um abraço para todos, segue abaixo o código.

// O socket é conectado em um outro metodo…
// Declaração das variáveis…
BufferedReader input;
PrintWriter output;
String lineToBeSent, lineReturn;

if (socket.isConnected()) {
try {
// Não entendi o que a variável abaixo tem a ver com o socket…
input = new BufferedReader(new InputStreamReader(System.in));

output = new PrintWriter(socket.getOutputStream(),true); 
// Pego e linha para transmitir para o server...
lineToBeSent = "ListaGrupos(" + Oper + ")

";
// Envio a linha
output.println(lineToBeSent);
// Armazena a resposta na varialvel lineReturn…
// Ou pelo menos a intençào é essa :slight_smile:
lineReturn = input.readLine();
input.close();
output.close();
System.out.println(lineReturn);
}
catch (IOException e) {
System.out.println("Erro de I/O GetADC: " + e);
}
catch (Exception e) {
System.out.println(LastResult = "Falha GetADC: " + e);
}
}

vc precisa pegar o InputStream do socket e nao do System.in

Blz, agora parece que eu estou quase lá, usei a dica acima

BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintStream output = new PrintStream(socket.getOutputStream());
output.println(lineToBeSent);
lineReturn = input.readLine();

O único problema é que única coisa que eu recebo, independente do que eu envio é um “Hello”.

Descobri que a ocx usa uma dll chamada “wsock32.dll” ou “winsock.dll”.
O Socket do java tem as mesmas funcionalidades? :?:

Ou o mais provável, o que será que eu estou fazendo de errado? :?:

Um grande abraço para todos… :slight_smile: Tô quase lá…

Acho que intendi, mas não sei como resolver,
Parece que o retorno “Hello” é padrão para saber que houve uma resposta válida. O retorno realmente se eu não me engano fica em uma espécie de buffer.
Ai que está o x da questão, como faço para receber a string armazenada neste buffer? :?:

um abraço para todos…
:slight_smile:

Achei o caminho do Zorro… :lol:

O que aconteceu foi o seguinte:
Estava retornando apenas o “Hello”, por que eu não estava lendo todas as linha que o server estava enviando, desta forma a única coisa que eu estava recebendo era a primeira linha.
Vejam a jornada…
Depois da minha ultima msg resolvi então dar um olhada no Livro “Java Como Programar 3ª Ed” (aquele vga hehehe), e no capitulo Rede (da pag 918 à 928) há um exemplo de Socket Client e Server só que ele usa ObjectInputStream, ai que cag… tudo, comecei a receber uma exception “java.io.StreamCorruptedException:invalid stream header” desesperado fiz uma busca no Google e achei a página
http://forum.java.sun.com/thread.jsp?thread=419242&forum=4&message=1861835
onde pude ver que o ObjectInputStream é apenas de o sevidor estiver enviando um objeto, desta forma não ia funcionar nunca…
Também nesta página vi que o que estava sendo usado era:

PrintStream output = new PrintStream(socket.getOutputStream());
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));

Já que o meu sevidor envia um comando string e não Objetos, ou seja, meu projeto estava quase que exatamente como estava na na minha segunda msg, se não fosse por um detalhe: :wink:
Fiz um do {} while para ler a resposta do servidor, da mesma forma que estava no livro.
Eai… Biiinnnggo!!!
Um grande abraço para todos e obrigado pela ajuda e atenção no decorrer do dia todo. :stuck_out_tongue:

o código final ficou assim:

[code]
// Só para acressentar estou incluindo
// também a conexão com o socket
private Socket socket ;

try {
socket = new Socket (“127.0.0.1”,35000);
// Envia uma confirmação de conexão para o usuário…
System.out.println(socket.getInetAddress().getHostAddress() + “:” + socket.getPort():wink:
}
catch (Exception e) {
System.out.println(e);
}

// O socket é conectado em um outro metodo…
public String GetAvailableADCGroups(String Oper) {
String lineToBeSent, lineCurrent,lineReturn;
if (socket.isConnected()) {// Verifica se o socket está conectado
try {
// Armazena a string que será enviada
lineToBeSent = “ListaGrupos(” + Oper + “)”;

// Variável que envia o comando
PrintStream output = new PrintStream(socket.getOutputStream());
// Várialvel que retorna o resultado do server
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));

// Enviando a string;
output.println(lineToBeSent);
lineReturn = “”;

// Este foi o pulo do gato, o caminho do zorro… :slight_smile:
do {
try {
// Lê linha a linha a ser enviada…
lineCurrent = input.readLine();
// Se a linha lida possui algum valor armazena o resultado
if (!(lineCurrent.trim().equals(“Hello”) && (lineCurrent.trim().length() > 0)) ) {
// Amazena a string com um delimitador próprio “|/@|”
lineReturn += lineCurrent.trim() + “|/@|”; }
// apenas para Debug…
System.out.println(lineCurrent);
}
// Trata as exceções…
catch (Exception e) {
System.out.println(e);
return “”;
}
} while (lineCurrent.trim().length() > 0);

// Fecha o input e o output
input.close();
output.close();

LastResult = “Listagem de grupo DAC carregada”;
// Retorna o valor recebido pelo server…
return lineReturn;
}
catch (IOException e) {
LastResult = "Erro de I/O GetADC: " + e;
return “”;
}
catch (Exception e) {
LastResult = "Falha GetADC: " + e;
return “”;
}
}
else {
LastResult = “Server não conectado”;
return “”;
}
}[/code]