Я изучаю сокеты и делаю короткий пример того, как отправлять сериализуемые объекты через java сокетов. Проблема в том, что когда я копирую оба входных и выходных потока (ObjectOutputStream
и ObjectInputStream
). Программа не будет продолжать курс. Я хочу обменять объект из класса User
, который я создал на сервере и клиенте.
Это моя серверная программа:
public class Main {
public static void main(String[] args) throws IOException, ClassNotFoundException {
ServerSocket server = new ServerSocket(3333);
Socket client = server.accept();
ObjectInputStream objectInput = new ObjectInputStream(client.getInputStream());
ObjectOutputStream objectOutput = new ObjectOutputStream(client.getOutputStream());
System.out.println("Instances created"); //Doesn't print on execution
User user = (User)objectInput.readObject();
System.out.println(user.toString());
client.close();
server.close();
}
}
А это клиентская программа:
public class Main {
public static void main(String[] args) throws IOException {
Socket server = new Socket("here I wrote my IP", 3333);
User user = new User("Me", "me@gmail.com", 20);
ObjectInputStream objectInput = new ObjectInputStream(server.getInputStream());
ObjectOutputStream objectOutput = new ObjectOutputStream(server.getOutputStream());
System.out.println("Instances created"); //Doesn't print on execution
objectOutput.writeObject(user);
server.close();
}
}
Когда я запускаю сервер, клиент, обе программы продолжают выполняться, но на консоли ничего не отображается. Даже System.out.println("Instances created");
.
Почему? Я что-то не так делаю?
Если вам интересно, класс User выглядит так:
public class User implements Serializable {
private String name;
private String email;
private int edad;
public User (String name, String email, int edad) {
this.name = name;
this.email = email;
this.edad = edad;
}
@Override
public String toString() {
return name + " (" + email + "), " + edad + " años";
}
}