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

4 respostas
black_fire

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 <img src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14/assets/72x72/s.pnglight_smile.png?v=9" title=":slight_smile:" class="emoji" alt=":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);

}

}

4 Respostas

F

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

black_fire

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á…

black_fire

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:

black_fire

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. :P

o código final ficou assim: ------------------------------------------------------------
// 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();)
}
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... :)				
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 "";
}
}
Criado 11 de agosto de 2003
Ultima resposta 11 de ago. de 2003
Respostas 4
Participantes 2