Java seriarizable + socket
Форум — Development
Добрый день! Пилю я тут в целях самообразования многопоточный сервер сообщений («ненужно!»), предполагаю передавать данные от клиента серверу и обратно как сериализованные объекты. Но что то ниего не получается. Строки и даты - получается, свои объекты - нет. Делаю все это впервые. Полностью проект на гитхабе
Основная часть сервера
package org.svgroz.client_listner;
import org.svgroz.notification.IObserver;
import org.svgroz.notification.ISubject;
import java.io.*;
import java.net.Socket;
import java.util.Date;
import org.apache.log4j.Logger;
public class ClientListener extends Thread implements IObserver {
private Socket client;
private ISubject subject;
private Logger logger;
public ClientListener(Socket client, ISubject subject) {
this.client = client;
this.subject = subject;
logger = Logger.getLogger(ClientListener.class.getName());
}
public void update(String message){
try {
PrintWriter writer = new PrintWriter(client.getOutputStream(), true);
writer.println(message);
}
catch (Exception exception) {
logger.error(exception.getMessage());
}
}
@Override
public void run () {
try {
ObjectInputStream objectInputStream = new ObjectInputStream(client.getInputStream());
Date message;
while ((message = (Date)objectInputStream.readObject()) != null) {
logger.info(message);
}
objectInputStream.close();
this.subject.removeObserver(this);
}
catch (IOException exception) {
logger.warn(exception.getMessage());
}
catch (Exception exception) {
logger.error(exception.getMessage());
exception.printStackTrace();
}
finally {
try{
client.close();
logger.info("Connection closed");
} catch (IOException exception){
logger.error(exception.getMessage());
}
}
}
}
package org.svgroz;
import java.io.*;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.channels.SocketChannel;
import java.util.Date;
public class EchoClient {
public static void main(String[] args) throws IOException {
String hostName = "localhost";
int portNumber = 4444;
try{
SocketChannel socketChannel = SocketChannel.open();
socketChannel.connect(new InetSocketAddress(hostName, portNumber));
ObjectOutputStream objectOutputStream = new ObjectOutputStream(socketChannel.socket().getOutputStream());
Date message = new Date();
Thread.sleep(1000);
objectOutputStream.writeObject(message);
} catch (Exception e) {
System.err.println(e.getMessage());
System.exit(1);
}
}
}