如何在Java Socket编程中接收对象?

4

我是一名新手,正在学习Java网络编程。

我编写了一个简单的客户端-服务器代码,用于从客户端向服务器发送一个类对象。

我使用了PrintStream来发送对象,并且发送成功了。但是,当我使用BufferedReader来接收对象时,在服务器端无法接收到。

客户端代码:

public class Client3 {

public String username;
public String password;

public static void main(String argv[]) throws IOException
{
    Client3 account = new Client3();
    account.username = "PJA";
    account.password = "123456";

    Socket s = new Socket("localhost",6000);
    PrintStream pr = new PrintStream(s.getOutputStream());
    pr.println(account);
}

}

服务器代码:

public class Server3 {

public static void main(String argv[]) throws IOException
{
    ServerSocket s1 = new ServerSocket(6000);
    Socket s = s1.accept();
    BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
    Client3 a = new Client3();
    a = in.readLine(); // give a compilation error.

}

}

readline() 抛出编译错误,因为它只接受字符串。

所以我的问题是:"有没有一种方法可以接收类的对象?"


1
@Abdelhak,我想要在客户端接收我发送的对象。 - PJA
但我知道这是编译错误,因为它只接受一个字符串,但我正在寻找一种接收该对象的方法。 - PJA
1个回答

1

问题:“有没有一种方法可以接收类的对象?”

答案:是的,有很多种方法:

  1. Java RMI(Java 远程方法调用)

  2. Java SOAP Web 服务(简单对象访问协议 Web 服务)

  3. 您可以使用本机 Java 序列化并直接写入 Java 套接字(基本上,重新发明自己的 RMI):http://www.coderpanda.com/java-socket-programming-transferring-of-java-objects-through-sockets/,或者http://www.jguru.com/faq/view.jsp?EID=10472。如果将您的对象标记为“可序列化”,则可以简单地使用 outputStream.writeObject() 写入和 ObjectInputStream() 读取。

  4. 您可以将对象状态读取和写入 JSON,并通过套接字发送 JSON 文本:http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/

  5. 等等。

选项3)是最接近你所询问的内容。我也鼓励你考虑选项4)。这里有一个很好的教程:http://tutorials.jenkov.com/java-json/jackson-objectmapper.html


谢谢,我尝试了本地的Java序列化,对我来说效果很好。+1 - PJA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接