Estou tentando fazer um servidor e cliente utilizando sockets.
Fiquei com dúvidas na linha 35: “line = in.readLine();”.
Eu quero entender se o comando readLine fica aguardando uma mensagem ser recebida, semelhante ao funcionamento do .accept que aguarda uma conexão, ou se ele simplesmente verifica se há algo para ler e, se não houver, continua o while.
Realizando alguns testes, me pareceu que ele não aguarda, simplesmente tenta ler. Como não é sempre que há algo para ler, ele vai para o catch e finaliza o programa.
Podem ajudar?
Obrigado.
import java.io.*;
import java.net.*;
import java.lang.*;
public class PkrServidor {
public static void main(String[] args) {
try {
ServerSocket serv = new ServerSocket(12346);
System.out.println("Servidor iniciado, ouvindo a porta " + 12346);
while(true) {
Socket clie = serv.accept();
new ThreadCliente(clie).start();
}
}
catch(Exception e) {}
}
}
class ThreadCliente extends Thread {
private Socket cliente;
public ThreadCliente(Socket cliente) {
System.out.println("b" + cliente);
this.cliente = cliente;
}
public void run() {
BufferedReader in = null;
PrintWriter out = null;
String line;
try {
in = new BufferedReader(new InputStreamReader(cliente.getInputStream()));
out = new PrintWriter(cliente.getOutputStream(), true);
while (true) {
try {
line = in.readLine();
System.out.println(line.length());
if (line.length() > 0) {
System.out.println(line);
out.println("ok");
}
} catch(IOException e) {
System.out.println("Read failed");
System.exit(-1);
}
}
}
catch(IOException e) {
System.out.println("Excecao ocorrida na thread: " + e.getMessage());
}
}
}