Я пишу программу сервера/клиента. Клиент отправляет «запрос» (которые являются объектами, предназначенными для этой цели) на сервер, а сервер декодирует их с помощью ObjectInputStream. Все объекты «Запрос» имеют один и тот же класс и просто различаются в полях данных.
Все обычно работает; но в некоторых конкретных состояниях (возможно, когда объект Request немного больше, но не более 200 kb!) readObject() на серверах просто блокирует без исключения.
Любая идея ?!readObject() блокировка для определенных объектов
Серверный код:
public class ConnectionThread extends Thread {
Socket con;
Request request;
public ConnectionThread(Socket s) {
con = s;
try {
ObjectInputStream in = new ObjectInputStream(con.getInputStream());
// Works till here; the object "in" is initialized.
request = (Request) in.readObject();
// This line is not reached, in particular cases.
} catch (ClassNotFoundException ex) {
Logger.getLogger(ConnectionThread.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(ConnectionThread.class.getName()).log(Level.SEVERE, null, ex);
}
}
...
}
Код клиента:
public static void saveStoreDataForTable(DataTable tb) {
try {
Socket s = new Socket("localhost", portNo);
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
out.writeObject(new Request("saveStoreData",
new Object[]
{tb.getEdited(), tb.getRemoved(), tb.getNewTables(), tb.getAlterations()}));
out.flush();
// These lines work. But I can't get servers respone; again, in some particular cases.
...
}
Я думаю, что вам нужно здесь, это улов с Исключением, чтобы поймать любые другие исключения, о которых вы не подумали. Я вижу, возможно, in.readObject() может не возвращать объект типа «Запрос»? –
'readObject()' не блокирует определенные объекты '. Он блокируется, когда нет данных для приема. – EJP