2015-12-18 4 views
-1

im писать приложение клиент/сервер, которые обмениваются данными через сокет tcp. и im сталкиваются с проблемой сейчас на заключительных этапах моей работы. проблема в том, что у меня есть arrayList<object> на сервере, и я пытаюсь его сериализовать с помощью jackson и отправить его клиенту. он отлично работает, когда массив имеет только один объект в нем. но когда в моем будет два объекта или больше, сервер будет правильно отправлять его клиенту, но на стороне клиента он выглядит как im, не получающий ничего, он все равно будет застревать на read(), так как ничего не получает.невозможно прочитать из входного сокета потока в java

im также промывка выходного потока. и сериализация верна, я вижу.

Я должен упомянуть, что im отправляет и принимает все другие вещи отлично, но у меня только проблема с ArrayLists, которая включает в себя более одного объекта в них.

вот как им отправка данных (это не проливает ошибки и отправить его tottaly правильно):

write(Repository.clone(mainServer.findSpecifidUsername(repository.getSelf().getLoginForm().getUsername()), repository)); 

здесь функция записи:

public boolean write (String string) 
    { 
     try 
     { 
      this.streamOut.writeUTF(string); 
      streamOut.flush(); 
      return true; 
     } 
     catch (Exception ex) 
     { 
      System.out.println(ex.getMessage()); 
      return false; 
     } 
    } 

и вот как им читать его на клиентской стороне:

String json = User.communicationConnection.read(); 

и здесь есть функция чтения:

public String read() 
    { 
     String string; 
     try 
     { 
      string = this.streamIn.readUTF(); 
      return string; 
     } 
     catch (Exception ex) 
     { 
      System.out.println(ex.getMessage()); 
     } 
     return null; 
    } 
+0

Просьба предоставить сериализованные строки, в которых есть один объект в массиве и пара объектов в массиве. Какую функцию вы используете для отправки данных? – dezhik

+0

А какой поток вы используете для чтения/записи? – Jan

+0

спасибо, ребята, это было потому, что длина струны была очень большой. –

ответ

0

Я решил проблему как-то. это было потому, что я отправлял действительно большую строку (более 4000 символов) даже в том случае, когда в массиве был один объект (это была не моя ошибка, у объекта было много полей ;-)), и когда я сериализовал массив более чем один объект, он стал бы действительно действительно большой строкой, которая заставила бы ее навсегда получить ее на другом конце. Решение состоит в том, отправлять ли его в байтах или просто отправлять меньшие строки.

Я сделал второе решение и его штраф сейчас.

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