简体   繁体   中英

How I can send a object from Client to Server in Java?

Hi i want test a connection between Client and Server in Java. For Example I want to send a object from client to Server. The object is a User that I built.

If I start the Server and the Client I get this error:

  run:
java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:209)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at java.net.SocketInputStream.read(SocketInputStream.java:223)
    at java.io.ObjectInputStream$PeekInputStream.peek(ObjectInputStream.java:2296)
    at java.io.ObjectInputStream$BlockDataInputStream.peek(ObjectInputStream.java:2589)
    at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2599)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1319)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
    at taraticketclienttest.TaraTicketClientTest.main(TaraTicketClientTest.java:37)
BUILD SUCCESSFUL (total time: 0 seconds)

Here is my Client:

public static void main(String[] args) throws ClassNotFoundException {

        try(Socket socket = new Socket("localhost", 7778)) {

            ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
            ObjectInputStream in = new ObjectInputStream(socket.getInputStream());

            User u = new User("Wowa");

            out.writeObject(u);

            User u2 = (User)in.readObject();

            System.out.println(u2.getName());


        } catch (IOException ex) {
          ex.printStackTrace();
        }
    }

Here is my Server:

public class DemoServer {
public static void main(String[] args) throws ClassNotFoundException {
    try(ServerSocket serverSocket = new ServerSocket(7778)) {

        while (true) {                
            Socket clientSocket = serverSocket.accept();
            System.out.println("socket open...");

            ObjectInputStream in = new ObjectInputStream(clientSocket.getInputStream());
            ObjectOutputStream out = new ObjectOutputStream(clientSocket.getOutputStream());

            User u = (User) in.readObject();

            System.out.println(u.getName());

            out.writeObject(u);
        }

    } catch (IOException ex) {
      ex.printStackTrace();
    }
}

}

Here is my User:

public class User implements Serializable {
private String name; 

public User(){}

public User(String name){
    this.name = name;
}

public String getName(){
    return this.name;
}

}

You need your class User to implement Serializable :

public class User implements Serializable {
    ...
}

Objects can not be writen to / read from ObjectInputStream or ObjectOutputStream unless they implement Serializable

As an alternative you could send the object as a String in JSON format, by using Jackson or Boon . They are definitely faster than defalut java object serialization (and you don't need to make the class Serializable)

You can get more info on JSON-Object serialization using jackson in the following link how-to-convert-java-object-to-from-json-jackson

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM