|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - ObjectOutputStream - NotSerializableException??? |
|
Java - ObjectOutputStream - NotSerializableException???
|
Пользователь Сообщения: 96 |
Здравствуйте, вот такая беда у меня, копался чуток в инете, есть темы похожие, но мне не получается.
Вот здесь есть похожее http://cloud-cuckoo.com.ua/content/j...ectinputstream Кто сталкивался подскажите пож!!! Пробую сделать многопоточный сервер. Пока все получается, но мне нужно передать на клиенты объект через который они будут общаться. При попытке передачи такого объекта, я получаю NotSerializableException - что нужно сериализировать, зачем? Спасибо! Клиент посылает название сервера главному серверу. 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(); } } } 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 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
|