Java 创建一个新的 ObjectInputStream block

标签 java debugging sockets inputstream

我正在尝试使用从 Socket 检索的 InputStream 创建一个新的 ObjectInputStream。这是我的代码:

这是我的 MessageGetterSender 类的构造函数。程序无法到达检查点 4。

public MessageGetterSender(Socket socket) {

    System.out.println("MessageGetterSender: Checkpoint 1");

    this.socket = socket;

    // Get input and output streams
    try {
        System.out.println("MessageGetterSender: Checkpoint 2");

        InputStream is = socket.getInputStream();

        System.out.println("MessageGetterSender: Checkpoint 3");

        this.in = new ObjectInputStream(is);

        System.out.println("MessageGetterSender: Checkpoint 4");

    } catch (IOException ioe) {
        System.out.println("Could not get ObjectInputStream on socket: " + socket.getLocalPort());
    }

    try {
        this.out = new ObjectOutputStream(socket.getOutputStream());
    } catch (IOException ioe) {
        System.out.println("Could not get ObjectOutputStream on socket: " + socket.getLocalPort());
    }

    System.out.println("MessageGetterSender: Checkpoint 5");
}

我正在从一个连接到服务器以获取套接字的类中实例化一个新的 MessageGetterSender 对象。这是相关的代码。它是 InstantMessageClass 的构造函数,该类实例化 MessageGetterSender 对象:

public InstantMessageClient(String username) {

try {
    socket = new Socket("localhost", 5555);
} catch (IOException ioe) {
    System.out.println("Error: Could not connect to socket on port: " + serverPort);
}

messageGetterSender = new MessageGetterSender(socket);

...

由于代码没有执行到检查点 4,但它确实到达了检查点 3,我很确定 ObjectInputStream 的实例化是罪魁祸首。我不知道为什么。有任何想法吗?感谢您的帮助。

最佳答案

只是为了扩展 FatGuy 对其他发现此问题的 Google 员工的回答;解决这个“鸡和蛋问题”的方法是让每一方先打开输出流,刷新输出流,然后再打开输入流。

ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
out.flush();
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());

关于Java 创建一个新的 ObjectInputStream block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5658089/

相关文章:

java - 如何正确启动Tomcat服务?

java - 如何使用Spring Security仅保护一个URL并允许所有URL

java - 有没有好的自然语言处理库

c++ - 通过套接字将数据作为字符串发送的好方法是什么?

java - Sqlite3 与 android 提取保存在数据库中的位置数据并将其放入 map 上

android - 在 Android 中调试 Kotlins 协程

javascript - Console.log 不起作用,devtools 控制台没有显示错误

java - Eclipse:在 Debug模式下更改变量的描述

c++ - listen() 是连续运行还是我需要循环它以继续接收套接字上的连接?

c++ - 什么时候开始担心网络代码?