一个ObjectOutputStream,可与套接字一起使用

时间:2014-01-23 00:54:09

标签: java sockets objectoutputstream

我正在尝试创建一个网络连接的基本示例,其中我使用ObjectOutputStream,ObjectInputStream和套接字。客户端将字符串“Hello”发送到服务器。如您所见,此字符串使用相同的ObjectOutputStream发送10次。然后服务器将字符串“Goodbye”发送给客户端。控制台应显示字符串“hello”的10倍和字符串“Goodbye”的10倍。但他们只有一次出现。我在很多线程中读到了ObjectOutputStream的方法reset()。但它似乎对我不起作用。有什么想法是什么问题?我已经尝试过许多不同的事情而没有成功。

这是客户:


    try  
    {       
        Socket socket = new Socket("localhost", 5555);
        ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
        ObjectInputStream in = new ObjectInputStream(socket.getInputStream());

        int i = 10;
        while (i > 0) 
        {           
            //send String
            out.writeObject("Hello");               
            out.flush();
            out.reset();

            //receive String
            String result = (String) in.readObject();
            System.out.println(result);
            i--;
        }       
    } catch (IOException e) 
    {
        e.printStackTrace();
    } catch (ClassNotFoundException e) 
    {           
        e.printStackTrace();
    } finally
    {
        out.close();
        in.close();
        socket.close();
    }

这是服务器:


try
    {   
        ServerSocket server = new ServerSocket(5555);
        while(true)
        {
            try
            {
                Socket client = server.accept();                            
                ObjectInputStream in = new ObjectInputStream(client.getInputStream());
                ObjectOutputStream out = new ObjectOutputStream(client.getOutputStream());

                //receive String
                String input = (String) in.readObject();
                System.out.println(input);

                out.writeObject("Goodbye");
                out.flush();
                out.reset();

            } catch(IOException e1)
            {
                e1.printStackTrace();
            } catch (ClassNotFoundException e) 
            {               
                e.printStackTrace();
            }
        }
    } catch(IOException e2)
    {
        e2.printStackTrace();
    }

1 个答案:

答案 0 :(得分:0)

您的服务器只对每个接受的套接字进行一次读写。所以客户端不可能十次读取对象。

您的服务器在完成后也没有关闭流。