[Resolvido]Problema Sockets

7 respostas
C

Criei duas classes , uma para enviar mensagens e outra para responder.

Bem simples mesmo.
Porém não esta enviando, ambos rodam , mas ao digitar a mensagem no console ela nao é enviada, nem chega a mensagem Conectado.

Alguém sabe o por que?

Classe Um

package chats;

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

public class ConselhoCliente {

	/**
	 * @param args
	 * @throws IOException 
	 * @throws UnknownHostException 
	 */
	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket socket = new Socket("10.0.0.101",5000);
		Scanner s = new Scanner( socket.getInputStream());
		System.out.println("send"+s.nextLine());
		s.close();
	}

}

Classe 2

package chats;

import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class ConselhoServidor {
	public static void main(String[] args) throws Throwable {
		ServerSocket ss = new ServerSocket(5000);
		
		while (true) {
			Socket  socket = ss.accept();
			PrintWriter pw = new PrintWriter( socket.getOutputStream());
			pw.println("Conectou !!");
			
		}
	}

}

7 Respostas

C

Tenta usar o pw.flush(); para enviar
Abraço

C

Dei uma lida na APi do .flush , mas não consegui entender, poderia explicar melhor?

Funcionou ao adicionar pw.flush(); ao fim.

A questão é que gostaria de entender oque o .flush faz, ja que estou fazendo a titulo de estudo .

Obrigado se puder explicar.

A

cara,

duas perguntas,

a maquina cliente pinga esse ip 10.0.0.101?
a maquina cliente se vc der telnet nesse ip e nessa porta, ele responde?

t+

C

Salve cara,

O flush() libera o fluxo de dados de um outputstream, como isto é voltado para arquivos e streans de rede, pode sair mais de uma coisa de uma vez(dois prtinln do PrintWriter no caso), então o flush liberaria isso de uma vez para poupar espaço e não congestionar uma rede.

Abraço

brunogalvaos

CaioIncau tenta fazer isso:

Classe Servidor

import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class ConselhoServidor {
	public static void main(String[] args) throws Throwable {
		ServerSocket ss = new ServerSocket(5000);
		Socket socket = ss.accept();
		System.out.println("O cliente "
				+ socket.getInetAddress().getHostAddress() + " conectou!");
		Scanner leitor = new Scanner(socket.getInputStream());
		while(leitor.nextLine()!=null){
			System.out.println(leitor.nextLine());
		}
	}
}

Classe Cliente

import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class ConselhoCliente {
	public static void main(String[] args) throws UnknownHostException, IOException {
		Socket socket = new Socket("10.0.0.101", 5000);
		Scanner leitor = new Scanner(System.in);
		PrintStream escritor = new PrintStream(socket.getOutputStream());
		while(leitor.nextLine()!=null){
			escritor.println(leitor.nextLine());
			escritor.flush();
		}
	}
}
soaresinfo

Streams de arquivo ou socket, usam buffer para enviar os dados em blocos de tamanho definido, quando o buffer fica cheio, aí sim o componente manda os dados para o arquivo ou para a rede automaticamente, isso é para otimizar a utilização de recursos. Como você tentou mandar poucos bytes, foi necessário chamar o flush para forçar o envio dos dados.

C

Entao bruno galvao.

Neste modelo ele não esta enviando oque digito =/.

Criado 8 de novembro de 2011
Ultima resposta 9 de nov. de 2011
Respostas 7
Participantes 5