【问题标题】:getInputStream blocks?getInputStream 块?
【发布时间】:2011-11-11 01:15:02
【问题描述】:

使用输入/输出流在我的客户端和服务器之间传递对象。我可以用我的服务器发送和接收对象,现在我希望客户端也可以发送相同的对象。所以我给了我的客户一个 ObjectInputStream。但是,当我初始化它时,它会阻塞!一直在寻找答案,但没有解决方案。

请帮忙!

public GameConnection(String strPort, TextArea chat)
    {
        this.port = Integer.parseInt(strPort);
        System.out.println("GameConnection::Constructor(): Connecting on port " + port);
        this.chat = chat;


        connect = new Connection();
        sendObject();
    }
    public void sendObject()
    {
        try
        {  
            obj_stream.writeObject(new String("GameServer received a message!"));  
        }
        catch(Exception e){System.out.println("GameConnection::sendObject(): " + e);}  
    }  

    protected class Connection extends Thread
    {
        private boolean alive = true;

        public Connection()
        {
            try
            {
                socket = new Socket(host, port);
                System.out.println("Connected to GAMESERVER" + host + " on port + " + port);
                obj_stream = new ObjectOutputStream(socket.getOutputStream());
                // Next line BLOCKS!!!
                //ObjectInputStream stream = new ObjectInputStream(socket.getInputStream());
            }
            catch (IOException ioe)
            {
                System.out.println("Connection::constructor() " + ioe);
                Terminate();
            }
            catch (NullPointerException npe)
            {
                System.out.println("Connection::constructor() " + npe);;
                Terminate();
            }

        }

我尝试在不同的线程中使用它们,但它有同样的问题,至少对我来说:(

【问题讨论】:

    标签: java multithreading objectinputstream


    【解决方案1】:

    是的,这个问题已经被问过很多次了。对象流格式有一个标头,ObjectInputStream 在构造时读取该标头。因此,它一直处于阻塞状态,直到它通过套接字接收到该标头。假设您的客户端/服务器代码看起来相似,在您构造 ObjectOutputStream 之后,刷新它。这将强制通过网络传输标头数据。

    【讨论】:

    • 是的,我知道,我两边脸都红了,这把我带到了这里!
    • 好吧,我以前做过,然后又试了一次。但是我找到了解决方案,不知何故套接字损坏了,因为我从来没有得到标题。我猜代码不好,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    相关资源
    最近更新 更多