Olá a todos!
Tenho uma aplicação que utilizo java.net.ServerSocket e java.net.Socket para
a comunicação. Executo o método"accept()" de ServerSocket
para obter a conexão, logo depois, em outra thread determinada
comunicação acontece por meio do Socket retornado na método accept,
mas o problema é que o socket é fechado sem que eu invoque o método socket.close() e
isso acaba impossibilitando a comunicação.
O exemplo a abaixo:
O Servidor
package javaapplication;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class JavaApplication {
public static void main(String[] args) {
try{
ServerSocket ss = new ServerSocket(3000);
final Object blocker = new Object();
while (true ){
synchronized ( blocker ){
try{
Socket socket = ss.accept();
final OutputStream outputStream = socket.getOutputStream();
final InputStream inputStream = socket.getInputStream();
/*Notem que abaixo estou criando um fluxo
* para que várias comunicações ocorram em paralelo.
* O problema é que quando crio fluxo e acesso o Socket
* o mesmo é fechado.
*/
Thread th = new Thread()
{
@Override
public void run()
{
try{
while ( true ){
outputStream.write(1);
outputStream.flush();
int intValue = inputStream.read();
int i = 0;
}
}
catch (Exception e){
throw new InternalError(e.toString());
}
}
};
th.start();
}
catch ( Exception e ){
throw new InternalError(e.toString());
}
}
}
}
catch ( Exception e ){
javax.swing.JOptionPane.showMessageDialog(null, e.toString());
}
}
}
O client
package javaapplication;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class JavaApplication {
public static void main(String[] args) {
try{
InetAddress address = InetAddress.getByName("notebook");
Socket clientSocket = new Socket(address,3000);
while ( true )
{
OutputStream outputStream = clientSocket.getOutputStream();
InputStream inputStream = clientSocket.getInputStream();
int intValue = inputStream.read();
outputStream.write(2);
outputStream.flush();
int i = 0;
}
}
catch ( Exception e ){
throw new InternalError(e.toString());
}
}
}
Obrigado pela ajuda!