【问题标题】:unable to read from input stream socket in java无法从java中的输入流套接字读取
【发布时间】:2015-12-18 13:05:48
【问题描述】:

我正在编写一个通过 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;
    }

【问题讨论】:

  • 请提供序列化字符串,其中数组中有一个对象,数组中有一对对象。你用什么函数来发送数据?
  • 你用什么样的流来读/写?
  • 谢谢你们,因为字符串的长度非常非常大。

标签: java sockets arraylist jackson inputstream


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 2012-05-16
    • 2011-05-31
    相关资源
    最近更新 更多