java - 无法让 ObjectInputStream 工作

标签 java sockets stream network-programming

我目前正在尝试让我的服务器与客户端创建连接。我已经为每个连接创建了一个线程,但服务器当前没有创建输入流。我通过打印数字来测试这一点,但只打印出 1 和 2。我确信这只是我遗漏的一个小问题。

public class ObjectHandler implements Runnable{
    Socket sock;
    ObjectInputStream ois;
    ObjectOutputStream oops;
    InputStream is;


    public ObjectHandler(Socket clientSocket) throws IOException {
        System.out.println("1");
        sock = clientSocket;

        is = sock.getInputStream();
        System.out.println("2");
        ois = new ObjectInputStream(new BufferedInputStream(is));
        System.out.println("3");

        OutputStream os = sock.getOutputStream();

        oops = new ObjectOutputStream(new BufferedOutputStream(os));
        outputSockets.add(oops);    

    }

我现在已经删除了 throws IOException 并用 try catch 包围了读者。客户端崩溃后,它现在打印此错误:

at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
at ThreadPool$ObjectHandler.<init>(ThreadPool.java:95)
at ThreadPool.addThread(ThreadPool.java:31)
at ObjectServerTest.go(ObjectServerTest.java:93)
at ObjectServerTest.main(ObjectServerTest.java:124)

最佳答案

当通过套接字构建对象流时,您总是需要先构建输出流,并在创建输入流之前刷新(由于流的实现方式)。

关于java - 无法让 ObjectInputStream 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9826267/

相关文章:

c++ - 将 Qt 添加到 C-Socket 程序中?

c++ - 将多个迭代器推进到同一字符串流

java - JNI,无法运行 ndk-build

java - 使用 Java 连接到 URL 并获取 401

node.js - 如何从使用socket.io的 Controller 函数发出信号?

c++ - 如何检查 TCP 连接是否是本地的?

c++ - 从 streambuf 派生而不重写相应的流

javascript - 管道订购很重要吗?将 stdin 通过管道传输到 http 请求并将结果通过管道传输到 stdout

java - 验证月份输入 01 和 1?

java - 在Android中通过sharedPreferences在类之间传递值