[英]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
读取对象。
或者,您可以使用Jackson或Boon将对象作为JSON格式的String发送。 它们绝对比默认Java对象序列化更快(并且您无需使类Serializable)
您可以在以下链接中找到有关使用jackson进行JSON对象序列化的更多信息: how-to-convert-java-object-to-from-json-jackson
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.