无法从java中的输入流套接字读取

时间:2015-12-18 13:05:48

标签: java sockets arraylist jackson inputstream

我正在编写一个通过tcp套接字进行通信的客户端/服务器应用程序。 我现在正处于工作的最后阶段。问题是我在服务器上有arrayList<object>并尝试使用jackson序列化它并将其发送到客户端。当数组中只有一个对象时,它可以很好地工作。但是当我的arrayList中有两个或更多的对象时,服务器会正​​确地将它发送给客户端,但是在客户端,看起来我没有收到任何东西,它仍会卡在read()部分,就像什么都没有一样接收。

我也会刷新输出流。我可以看到序列化是正确的。

我必须提到我完全发送和接收所有其他内容但我只有ArrayLists的问题,其中包含多个对象。

这是我如何发送数据:(它不会抛出任何错误,它发送它完全正确):

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;
    }

1 个答案:

答案 0 :(得分:0)

我以某种方式解决了这个问题。这是因为我发送一个非常大的字符串(超过4000个字符),即使在数组中有一个对象时(对象有很多字段不是我的错;-))当我序列化数组时包括它将成为一个真正非常大的字符串,它将永远在另一端收到它。 解决方案是以字节发送还是只发送更小的字符串。

我做了第二个解决方案,现在很好。