java对象流

时间:2010-11-30 04:25:00

标签: java sockets dataoutputstream

我正在尝试在java中创建一个服务器,它将同时维护多达4个连接。我认为将相关信息保存在一个数组中可以达到我的目的,但是我遇到了一些麻烦。

这是我创建的课程:


import java.net.*;
import java.io.*;
public class tcpConnects{
private ObjectInputStream input;
private ObjectOutputStream output;
private int player;
public tcpConnects(int playerNumber, Socket connect) {
    // TODO Auto-generated method stub
        try{
            System.out.println("create InputStream");
            input= new ObjectInputStream(connect.getInputStream());
            System.out.println("create OutputStream");
            output= new ObjectOutputStream(connect.getOutputStream());
            System.out.println("streams created");
            //sendData("Welcome!");
            player=playerNumber;
        }catch (IOException ioException){
            ioException.printStackTrace();
        }
    }
    public ObjectInputStream getInput(){
        return input;
    }
    public void setInput(ObjectInputStream in){
        input=in;
    }
    public ObjectOutputStream getOutput(){
        return output;
    }
    public void setOutput(ObjectOutputStream out){
        output=out;
    }
    public int getPlayer(){
        return player;
    }
    public void sendData(String data){
        try{
            output.writeObject(data);
            output.flush();
        }catch (IOException ioException){
            ioException.printStackTrace();
        }
    }
}

无论如何,当我向类中发送一个套接字时,它会进入创建输入流的阶段,但是实际上从未创建过流。语法似乎是正确的,所以我只能假设存在某种形式的逻辑错误,我不知道。解释为什么这个类不会创建输入或输出流的任何帮助都将非常感激。

谢谢,

1 个答案:

答案 0 :(得分:7)

ObjectOutputStream之前创建ObjectInputStream 两端。 ObjectOutputStream的构造函数将标头写入ObjectInputStream的构造函数读取的流,因此如果首先创建ObjectInputStreams,则会出现死锁。