繁体   English   中英

如何使用Java将对象从客户端发送到服务器?

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

嗨,我想测试Java中客户端和服务器之间的连接。 例如,我想将一个对象从客户端发送到服务器。 该对象是我建立的用户。

如果我启动服务器和客户端,则会出现此错误:

  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)

这是我的客户:

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();
        }
    }

这是我的服务器:

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();
    }
}

}

这是我的用户:

public class User implements Serializable {
private String name; 

public User(){}

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

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

}

您需要您的User类来实现Serializable

public class User implements Serializable {
    ...
}

除非对象实现了Serializable否则无法将它们写入ObjectInputStream或从ObjectOutputStream读取对象。

或者,您可以使用JacksonBoon将对象作为JSON格式的String发送。 它们绝对比默认Java对象序列化更快(并且您无需使类Serializable)

您可以在以下链接中找到有关使用jackson进行JSON对象序列化的更多信息: how-to-convert-java-object-to-from-json-jackson

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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