启动服务器和客户端后,不会调用客户端类中的processInput方法。我尝试使用调试器查看是否可以找出导致问题的原因,但我无法找到。我在使用调试器时观察到的是(is(,ObjectInputStream实例未被初始化。每当我在调试器的这一行时,我都无法继续调试过程。
这是客户端的代码。
ObjectInputStream is;
ObjectOutputStream os;
Socket socket;
public ClientEmp(){
try {
socket = new Socket(InetAddress.getLocalHost(), 4200);
is = new ObjectInputStream(socket.getInputStream());
os = new ObjectOutputStream(socket.getOutputStream());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void processInput(){
String str = JOptionPane.showInputDialog("Enter your name: ");
try {
os.writeObject(str);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
System.out.println("Hello World!");
EventQueue.invokeLater(new Runnable() {
public void run() {
ClientEmp cli = new ClientEmp();
cli.processInput();
}
});
}
这是服务器的代码。
private Socket socket;
private ServerSocket serverSocket;
private ObjectInputStream is;
private ObjectOutputStream os;
public ServerEmp() {
try {
serverSocket = new ServerSocket(4200);
System.out.println("Server Started");
while (true) {
socket = serverSocket.accept();
getStream();
System.out.println("Connection made to the server");
try {
String str = (String) is.readObject();
System.out.println(str);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
private void getStream(){
try {
is = new ObjectInputStream(socket.getInputStream());
os = new ObjectOutputStream(socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new ServerEmp();
}
});
}
我想出了问题所在。问题在于 ObjectOutputStream 和 ObjectInputStream 实例在客户端和服务器上初始化的顺序。