Galera estou com um problema onde o valor recebido não contém um valor -1 que seria o fim dos Bytes. E isso faz com que o while pare e fique esperando algo. Alguém poderia dar uma luz?
Se eu usar um “for” com tamanho determinado funciona, mas não resolve meu problema. Preciso do while pq não posso saber o que vem do outro lado.
package socket;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Adaylon
*/
public class StartServer implements Runnable{
public static void main(String args[]){
StartServer se = new StartServer();
se.sta();
}
public void sta(){
new Thread(this).start();
}
public void run() {
System.out.println("Servidor inicializado...");
try {
ServerSocket server = new ServerSocket(4444);
Socket clientSocket = null;
for(;;){
System.out.println("Aguardando conexões");
clientSocket = server.accept();
System.out.println("Conectado na porta: " + clientSocket.getPort());
new Server(clientSocket).start();
}
} catch (IOException ex) {
Logger.getLogger(StartServer.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
*****************************************************************************
package socket;
/**
*
* @author Adaylon
*/
import java.io.*;
import java.net.*;
public class Server extends Thread{
private static String HELLO = "Hello Conectta Softwares";
private Socket clientSocket = null;
public Server(Socket so){
clientSocket = so;
}
@Override
public void run() {
try {
byte[] bt = new byte[1024];
byte[] read = new byte[1024];
String ts = "teste";
BufferedInputStream in = new BufferedInputStream(clientSocket.getInputStream());
BufferedOutputStream out = new BufferedOutputStream(clientSocket.getOutputStream());
InputStreamReader isr = new InputStreamReader(in, "ISO-8859-1");
StringBuffer buf = new StringBuffer();
bt = ts.getBytes();
int ch;
while((ch = isr.read()) != -1){ //O problema está aqui. Se eu colocar um "for" com tamanho determinado funciona.
buf.append((char)ch);
}
System.out.println(buf.toString());
out.write(bt,0,ts.length());
out.flush();
out.close();
in.close();
out = null;
in = null;
clientSocket.close();
}
catch(Exception e) {
System.out.print(e.getMessage().toString());
}
}
}
**************************************************************************************
package socket;
/**
*
* @author Adaylon
*/
import java.io.*;
import java.net.*;
class Client {
public static void main(String args[]) {
try {
byte[] bt = new byte[1024];
String ts = "teste";
Socket skt = new Socket("localhost", 4444);
BufferedInputStream in = new BufferedInputStream(skt.getInputStream());
BufferedOutputStream out = new BufferedOutputStream(skt.getOutputStream());
InputStreamReader isr = new InputStreamReader(in, "ISO-8859-1");
StringBuffer buf = new StringBuffer();
bt = ts.getBytes();
out.write(bt, 0, ts.length());
out.flush();
int ch;
while((ch = isr.read()) != -1){ //O problema está aqui. Se eu colocar um "for" com tamanho determinado funciona.
buf.append((char)in.read());
}
System.out.println(buf.toString());
in.close();
out.close();
}
catch(Exception e) {
System.out.print(e.getMessage());
}
}
}