public static void main(String[] args) {//服务器
try {
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("创建监听9999端口");
Socket socket =serverSocket.accept();
System.out.println("连接成功");
//读取客户机的User对象
ObjectInputStream input = new ObjectInputStream(socket.getInputStream());
User user = (User)input.readObject();
System.out.println(user);
System.out.println("收到客户端的内容");
//向客户机写入Message对象
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
Message message = new Message();
out.writeObject(message);
//读取客户机的Message对象
ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());
Message mess1 =(Message)objectInputStream.readObject();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {//客户机
User user = new User("wangjing", "123");
try {
Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
//去服务器验证对象是否存在
System.out.println("与服务器连接");
//向服务器写入User对象
ObjectOutputStream out= new ObjectOutputStream(socket.getOutputStream());
out.writeObject(user);
socket.shutdownOutput();
//向服务器读取Message对象
ObjectInputStream input = new ObjectInputStream(socket.getInputStream());
Message mess = (Message) input.readObject();
System.out.println("发送给服务器");
//再向服务器写入User对象
ObjectOutputStream input2 = new ObjectOutputStream(socket.getOutputStream());
Message mess2 = (Message) input.readObject();
System.out.println("发送给服务器");
} catch (Exception e) {
e.printStackTrace();
}
}
服务器报错:EOFException
客户机报错:SocketException
这是因为socket.shutdownOutput();
shutdownOutput 关闭客户端的输出流。相当于给流中加入一个结束标志-1
反之
shutdownInput 关闭客户端的输入流。相当于给流中加入一个结束标志-1
当客户机关闭了输出流,则服务器关闭了输入流
当服务器关闭了输出流,则客户机关闭了输入流
反之
当客户机关闭了输入流,则服务器关闭了输出流
当服务器关闭了输入流,则客户机关闭了输出流