Tengo un hilo que lee caracteres desde un lector de búfer (creado a partir de una toma de la siguiente manera):Java - Lectura de un lector tamponada (a partir de una toma de corriente) está en pausa el hilo
inputStream = new BufferedReader(new InputStreamReader(clientSock.getInputStream()));
Este código sólo funciona una vez. Por ejemplo, si un cliente se conecta y envía esto: "Esto es una prueba" y "Esta es otra prueba", la salida de host es:
Reading from stream:
Chars read from stream: 16
This is a test
Reading from stream:
Tenga en cuenta que el programa no recibe "Esta es otra prueba ", porque está atascado en la lectura de la secuencia. ¿Hay alguna forma de lidiar con esto sin reducir el tamaño del búfer? Este es el código de la rosca:
public void run() {
boolean dataRecieved = false;
char[] inputChars = new char[1024];
int charsRead = 0;
while (!stopNow) {
try {
Thread.sleep(getDataDelay);
//Read 1024 characters. Note: This will pause the thread when stream is empty.
System.out.println("Reading from stream:");
charsRead = inputStream.read(inputChars); //<< THIS LINE IS PAUSING THE THREAD!>
if ((charsRead = inputStream.read(inputChars)) != -1)
{
System.out.println("Chars read from stream: " + charsRead);
System.out.println(inputChars);
System.out.flush();
}
} catch (IOException e) {
System.out.println("IOException");
//TODO: CLIENT HAS DISCONNECTED...
} catch (InterruptedException e) {
System.out.println("Interrupted");
// Sleep was interrupted.
}
}
}
Código de cliente/remitente (no es mi código):
public static void main(String[] args) throws IOException {
// <<<<<<<<<<<CLIENT>>>>>>>>>>>>>>>
Socket sock = new Socket("127.0.0.1", 3000);
// reading from keyboard (keyRead object)
BufferedReader keyRead = new BufferedReader(new InputStreamReader(System.in));
// sending to client (pwrite object)
OutputStream ostream = sock.getOutputStream();
PrintWriter pwrite = new PrintWriter(ostream, true);
// receiving from server (receiveRead object)
InputStream istream = sock.getInputStream();
BufferedReader receiveRead = new BufferedReader(new InputStreamReader(istream));
System.out.println("Start the chitchat, type and press Enter key");
String receiveMessage, sendMessage;
while(true)
{
sendMessage = keyRead.readLine(); // keyboard reading
pwrite.println(sendMessage); // sending to server
System.out.flush(); // flush the data
if((receiveMessage = receiveRead.readLine()) != null) //receive from server
{
System.out.println(receiveMessage); // displaying at DOS prompt
}
}
}
Asegúrese de que el otro envía algo. – khachik
http://stackoverflow.com/questions/6293049/java-networking/6293184#6293184 –
Ese enlace no me ayuda. Ya estoy usando hilos. El problema es que no puedo recibir datos del cliente más de una vez. – David