Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - ObjectOutputStream - NotSerializableException???

Ответить
Настройки темы
Java - ObjectOutputStream - NotSerializableException???

Пользователь


Сообщения: 96
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Здравствуйте, вот такая беда у меня, копался чуток в инете, есть темы похожие, но мне не получается.
Вот здесь есть похожее http://cloud-cuckoo.com.ua/content/j...ectinputstream

Кто сталкивался подскажите пож!!!

Пробую сделать многопоточный сервер. Пока все получается, но мне нужно передать на клиенты объект через который они будут общаться.
При попытке передачи такого объекта, я получаю NotSerializableException - что нужно сериализировать, зачем? Спасибо!

Код: Выделить весь код
this.oOutputStream.writeObject(sendOutputStreamObject);
Клиент посылает название сервера главному серверу.
Код: Выделить весь код
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;

public class CHClient{

	private String serverName;
	private final int PORT = 8888;

	private ObjectInputStream oInputStream;
	private ObjectOutputStream oOutputStream;

	public CHClient(String serverName) throws IOException {

		this.serverName = serverName;

		Object[] inputStreamObject = null;
		String oInputStreamParam1;
		Object[] outputStreamObject = { this.serverName };

		InetAddress addr = InetAddress.getByName(null);
		System.out.println("addr = " + addr);
		Socket socket = new Socket(addr, PORT);
		try {
			System.out.println("socket = " + socket);

				this.oOutputStream = new ObjectOutputStream(socket.getOutputStream());
				this.oOutputStream.writeObject(outputStreamObject);

				this.oInputStream = new ObjectInputStream(socket.getInputStream());

				inputStreamObject = (Object[]) this.oInputStream.readObject();

				oInputStreamParam1 = inputStreamObject[0].toString();

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} finally {
			System.out.println("closing...");
			socket.close();
		}
	}
}
Сервер смотрит если сервера с таким именем еще нет - создает и возвращает объект(должен возвращать), Все работает, но как только суну в Стрим объект типа ChessMultiServerThread - вылетает NotSerializableException!
Код: Выделить весь код
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

public class ChessServer {
	private static final int PORT = 8888;
	private Socket socket;

	private ServerSocket serverSocket = null;
	private ArrayList<String> servers = new ArrayList<String>();
	private boolean isServerExist;

	private ObjectInputStream oInputStream;
	private ObjectOutputStream oOutputStream;

	public static void main(String[] args) throws IOException {

		new ChessServer();
	}

	public ChessServer() {
		Object[] inputStreamObject;
		Object outputStreamServerNameObj = null;
		Object outputStreamChMultiServObj = null;
		String oInputStreamParam1;

		System.out.println("Server Started");

		try {
			serverSocket = new ServerSocket(PORT);
			do {
				this.socket = serverSocket.accept();
				this.oInputStream = new ObjectInputStream(socket.getInputStream());

				inputStreamObject = (Object[]) this.oInputStream.readObject();
				this.oOutputStream = new ObjectOutputStream(socket.getOutputStream());
				oInputStreamParam1 = inputStreamObject[0].toString();

				isServerExist = isServerExist(oInputStreamParam1);

				if (!isServerExist) {
					ChessMultiServerThread serverOne = new ChessMultiServerThread(socket);
					outputStreamServerNameObj = new String("newServer");
					outputStreamChMultiServObj = serverOne;
				} else {
					outputStreamServerNameObj = new String("serverExist");
				}

				Object[] sendOutputStreamObject = { outputStreamServerNameObj, outputStreamChMultiServObj };
				this.oOutputStream.writeObject(sendOutputStreamObject);

			} while (true);

		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} finally {
			try {
				this.serverSocket.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	private boolean isServerExist(String serverName) {

		boolean isExist = this.servers.contains(serverName);
		System.out.println("isExist: " + isExist);
		System.out.println("serverName: " + serverName);
		if (isExist) {
			return true;
		} else {
			this.servers.add(serverName);
			return false;
		}
	}
}
Сервер для коммуникации между клиентами.(Только набросок - логика еще не зашита)
Код: Выделить весь код
import java.io.*;
import java.net.Socket;

public class ChessMultiServerThread extends Thread{

	private Socket socket;
	private BufferedReader in;
	private PrintWriter out;


	public ChessMultiServerThread(Socket s) throws IOException {
		socket = s;
		in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
		start();
	}

	@Override
	public void run() {
		try {
			// while (true) {
			String str = in.readLine();
			// System.out.println("Echoing: " + str);
			out.println(str);
			// }
		} catch (IOException e) {
			System.err.println("IO Exception");
		} finally {
			try {
				socket.close();
			} catch (IOException e) {
				System.err.println("Socket not closed");
			}
		}
	}

}

Отправлено: 14:42, 10-05-2012

 


Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - ObjectOutputStream - NotSerializableException???

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено




 
Переход