Sockets
Hola les pido su ayuda para realizar lo siguente
Deseo hacer una comunicacion cliente servidor que mas o menos quede asi
cliente ---> te voy a enviar un objeto
servidor <--- enviamelo
cliente ----> envia el objeto
servidor <---- confirma que llego
cliente ---> manda algun comando para cerrar el socket o manda mas comandos
entonces se enviaria algo de texto y despues se enviaria un objeto, puedo hacer que se envie texto o un objecto pero no los dos. si alguien ya lo a hecho me servivira de mucha ayuda
- Inicie sesión o regístrese para enviar comentarios



Este es una parte del codigo
import beans.Message;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import util.IOUtilities;
import util.SocketUtilities;
/**
*
* @author skuarch
*/
public class SocketProcessor implements Runnable {
static final Logger logger = Logger.getLogger(SocketProcessor.class);
private Socket socket = null;
private PrintWriter printWriter = null;
private BufferedReader bufferedReader = null;
private InputStream inputStream = null;
private OutputStream outputStream = null;
private ObjectInputStream objectInputStream = null;
private ObjectOutputStream objectOutputStream = null;
private String input = null;
private boolean flag;
//==========================================================================
public SocketProcessor(Socket socket) {
PropertyConfigurator.configure("log.properties");
this.socket = socket;
} // end SocketProcessor
//==========================================================================
@Override
public void run() {
try {
logger.info("attending client " + socket.getRemoteSocketAddress());
outputStream = socket.getOutputStream();
inputStream = socket.getInputStream();
printWriter = new PrintWriter(outputStream, true);
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
println(banner());
println("cmd: ");
while ((input = bufferedReader.readLine()) != null) {
logger.info("command: " + input);
handlerCommand(input);
if (!flag) {
break;
}
input = null;
println("cmd: ");
}
} catch (Exception e) {
logger.error("ERROR: SocketProcessor().run() ", e);
} finally {
SocketUtilities.closeSocket(socket);
}
} // end run
//==========================================================================
private String banner() {
String banner = "**********************************\n\r"
+ "This is a Sniffer Message Server\n\r"
+ "**********************************\n\r";
flag = true;
return banner;
} // end banner
//==========================================================================
private void println(String line) {
try {
printWriter.println(line + "\r");
printWriter.flush();
outputStream.flush();
} catch (Exception e) {
logger.error("ERROR: SocketProcessor().println() ", e);
}
} // end println
//==========================================================================
private void shutDown() {
println("the server will be shutdown");
disconnectClient();
System.exit(0);
} // end shutDown
//==========================================================================
private void disconnectClient() {
logger.info("disconnecting client");
println("Connection closed with client, bye !!");
SocketUtilities.closeSocket(socket);
IOUtilities.closeBufferdReader(bufferedReader);
flag = false;
} // enc closeConnection
//==========================================================================
private Object object() {
Object object = null;
try {
logger.info("receiving object ");
objectInputStream = new ObjectInputStream(inputStream);
object = objectInputStream.readObject();
flag = true;
} catch (Exception e) {
logger.error("ERROR: SocketProcessor().object() ", e);
disconnectClient();
} finally {
IOUtilities.closeObjectInputStream(objectInputStream);
}
if (object == null) {
logger.error("ERROR: SocketProcessor().object() returning null");
} else {
handlerObject(object);
}
return object;
} // end object
//==========================================================================
private void handlerObject(Object object) {
try {
if (object instanceof Message) {
Message m = (Message) object;
logger.info("se recivio un message " + m.getType());
}
} catch (Exception e) {
logger.error("ERROR: SocketProcessor().handlerObject() ", e);
}
} // end handlerObject
//==========================================================================
private void handlerCommand(String command) {
try {
//------------------------------------------------------------------
if (command.equalsIgnoreCase("exit")) {
disconnectClient();
} //----------------------------------------------------------------
else if (command.equalsIgnoreCase("shutDownServer")) {
shutDown();
} //----------------------------------------------------------------
else if (command.equalsIgnoreCase("ssn")) {
new Thread(new SSN(this.socket)).start();
} //----------------------------------------------------------------
else if (command.equalsIgnoreCase("")) {
println("command is empty");
disconnectClient();
} //----------------------------------------------------------------
else if (command.contains("object")) {
object();
} //----------------------------------------------------------------
else if (command.contains("info")) {
println("hostname: " + InetAddress.getLocalHost().getHostName());
} //----------------------------------------------------------------
else {
println("command " + command + " not found");
disconnectClient();
}
} catch (Exception e) {
logger.error("ERROR: SocketProcessor().handlerCommand() ", e);
}
} // end handlerCommand
} // end class
El error
cuando envio texto todo sale de maravilla pero cuando mando el comando object marca esta excepcion
13:41:11,625 ERROR SocketProcessor:135 - ERROR: SocketProcessor().object()
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
at java.io.ObjectInputStream.(ObjectInputStream.java:279)
at network.SocketProcessor.object(SocketProcessor.java:129)
at network.SocketProcessor.handlerCommand(SocketProcessor.java:197)
at network.SocketProcessor.run(SocketProcessor.java:61)
at java.lang.Thread.run(Thread.java:662)