我正在尝试在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();
}
}
}
无论如何,当我向类中发送一个套接字时,它会进入创建输入流的阶段,但是实际上从未创建过流。语法似乎是正确的,所以我只能假设存在某种形式的逻辑错误,我不知道。解释为什么这个类不会创建输入或输出流的任何帮助都将非常感激。
谢谢,
答案 0 :(得分:7)
在 ObjectOutputStream
之前创建ObjectInputStream
两端。 ObjectOutputStream
的构造函数将标头写入ObjectInputStream
的构造函数读取的流,因此如果首先创建ObjectInputStreams
,则会出现死锁。