2015-06-07 2 views
0

Когда я отправляю только один объект через сокет, я в порядке. Но когда я пытаюсь отправить два объекта, я получаюКак я могу отправить несколько объектов по одному сокету в java?

Exception in thread "main" java.net.SocketException: Connection reset 
at java.net.SocketInputStream.read(Unknown Source)) 

Я попробовал почти все, как флеш() или сброс(), но ни один из них не работает.

public String SendObject(Object o) throws IOException { 
    OutputStream outToServer = client.getOutputStream(); 
    ObjectOutputStream out = new ObjectOutputStream(outToServer); 
    out.writeUnshared(o); 
    InputStream inFromServer = client.getInputStream(); 
    DataInputStream in = new DataInputStream(inFromServer); 
    return in.readUTF(); 
} 
+0

Как вы отправляете один объект? Почтовый индекс. –

+0

Пожалуйста, отредактируйте исходное сообщение с кодом, который у вас есть (правильно отформатирован). Не ставьте его в комментарии. Кроме того, укажите точные ошибки, которые вы получили. – sstan

ответ

1

Вы используете ObjectOutputStream, чтобы написать Object (s) от клиента. Вы должны использовать ObjectInputStream (а не DataInputStream), чтобы читать их на сервере. Для того, чтобы прочитать две Object S может выглядеть примерно так,

InputStream inFromServer = client.getInputStream(); 
ObjectInputStream in = new ObjectInputStream(inFromServer); 
Object obj1 = in.readObject(); 
Object obj2 = in.readObject(); 

Кроме того, на стороне клиента, я думаю, что вы хотели writeObject (вместо writeUnshared) как

ObjectOutputStream out = new ObjectOutputStream(outToServer); 
out.writeObject(o); 
+0

но почему это работает, когда я отправляю только один объект? Я попробовал «WriteObject», и у меня были те же результаты – orestiskim

+0

@orestiskim. Вы проверили ['writeUnshared'] (https://docs.oracle.com/javase /7/docs/api/java/io/ObjectOutputStream.html#writeUnshared%28java.lang.Object%29) Javadoc? –

+1

Ничего плохого в использовании 'writeUnshared()' здесь: действительно, хорошая идея, если он планирует повторно отправить объекты. – EJP

0
  1. Вы должны использовать одни и те же потоки для срок службы гнезда, а не новые для отправки (или приема).
  2. Вам необходимо решить между потоками объектов и потоками данных. Не смешивайте их.
  3. Не пытайтесь смешивать между writeObject()/writeUnshared() и readUTF().
1

В то время как другие ответы (например, @ EJP в) правильны о правильном пути, чтобы отправить/получить объекты и обрабатывать потоки, я считаю, что непосредственная проблема находится на стороне сервера:

Exception in thread "main" java.net.SocketException: Connection reset 

Это, кажется, говорит о том, что соединение сломалось до того, как клиент получил ответ. Когда клиентская сторона пытается прочитать, он видит сломанное (сброс) соединение и выдает исключение.

Если (как вы говорите), метод sendObject работает в первый раз, то я подозреваю, что серверная сторона закрывает свой выходной поток, чтобы «сбросить» ответ ... или что-то в этом роде.

+0

так что вы предлагаете? – orestiskim

+0

Я предлагаю вам посмотреть, что делает серверная сторона. –

Смежные вопросы