【问题标题】:Passing an ArrayList From Server to Client Java (Trouble)将 ArrayList 从服务器传递到客户端 Java(问题)
【发布时间】:2014-04-11 20:24:02
【问题描述】:

这可能是一个我不知道的愚蠢问题,但似乎我被困在这里了。

所以我有一个服务器,我在这样的数组列表中添加了一些元素

ArrayList<Accounts> acc= new ArrayList<>();

run()

我有这样的事情

oos.writeObject(acc); 
oos.flush();

如果我System.out.println(acc); 它显示一切都很好。

在客户端我只是使用这样的东西:

ArrayList<Accounts> obj;

obj = (ArrayList <Accounts> )ois.readObject();

但它最终什么也没读。

这是来自服务器的错误:

java.net.SocketException: Software caused connection abort: socket write error
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:153)
    at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1857)
    at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(ObjectOutputStream.java:1766)
    at java.io.ObjectOutputStream.writeNonProxyDesc(ObjectOutputStream.java:1273)
    at java.io.ObjectOutputStream.writeClassDesc(ObjectOutputStream.java:1227)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1411)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
    at java.io.ObjectOutputStream.writeFatalException(ObjectOutputStream.java:1557)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:349)
    at MyThread.run(ServerTwoThread.java:52)

我认为服务器由于某种原因无法发送列表,是的,我的帐户类是可序列化的!

希望有一些意见!

编辑:我找到了,不是oos,而是ooos ...

【问题讨论】:

  • 我在我的应用程序中使用 DataOutputStream 对象初始化了 ObjectOutputStream

标签: java multithreading sockets serialization


【解决方案1】:

查看我在应用程序中使用的代码

public void run() {
        try {
            din = new DataInputStream(socket.getInputStream());
            names.add(din.readUTF());   // store the user name in arraylist
            Iterator iter = list.iterator();
        Socket socket;

        while (iter.hasNext()) {
            socket =  (Socket) iter.next(); // creating ArrayList to be written on the stream
            dout = new DataOutputStream(socket.getOutputStream());
            ObjectOutputStream obj = new ObjectOutputStream(dout);
            obj.writeObject(names); //write the list of users in stream of all clients
            dout.flush();
            obj.flush();
        }
        } catch (Exception oe) {
            System.out.println(oe);

        }
    }

我知道这不是你问题的确切答案,但它会对你有所帮助

【讨论】:

  • 您能否提供更多代码以便我们进一步帮助您?
  • 嗯,我已经尝试了一些可行的方法。例如,在没有线程类等的简单服务器客户端上,我尝试过:客户端:ArrayList obj; obj = (ArrayList)ois.readObject(); System.out.println(obj);服务器端:ArrayList list = new ArrayList(); oos.writeObject(list); oos.flush();这很好用!但是在我发布的原始代码中,它不起作用。我真的不明白:(((
  • @YnsHnrksn 你只提供了一小部分代码,所以我们不能对此发表太多评论。如果您可以提供更多代码,将以更好的方式提供帮助。如果他们有帮助,请不要忘记投票/接受答案
  • 好吧,我刚刚找到它,抱歉,这是我使用的流中的一个拼写错误,它吞噬了我生命中的 2 小时 -.- .
猜你喜欢
  • 2013-11-11
  • 2013-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-10
  • 2019-09-06
相关资源
最近更新 更多