SimpleClient.java
import java.net.*;
import java.io.*;
class testobject implements Serializable {
int value;
String id;
public testobject(int v, String s) {
this.value = v;
this.id = s;
}
}
public class SimpleClient {
public static void main(String args[]) {
try {
Socket s = new Socket("localhost", 2002);
OutputStream os = s.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
testobject to = new testobject(1, "object from client");
oos.writeObject(to);
oos.writeObject(new String("another object from the client"));
oos.close();
os.close();
s.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
SimpleServer.java
import java.net.*;
import java.io.*;
class testobject implements Serializable {
int value;
String id;
public testobject(int v, String s) {
this.value = v;
this.id = s;
}
}
public class SimpleServer {
public static void main(String args[]) {
int port = 2002;
try {
ServerSocket ss = new ServerSocket(port);
Socket s = ss.accept();
InputStream is = s.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
testobject to = (testobject) ois.readObject();
if (to != null) {
System.out.println(to.id);
}
System.out.println((String) ois.readObject());
is.close();
s.close();
ss.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
答案 0 :(得分:2)
由于您在帖子中重复了testobject
课程,很明显您认为可以使用它的两个副本。你不能。您必须在同一个包中的两端使用相同的一个。最好是相同的二进制文件。
如果您发送了空值,则NB readObject()
仅返回null。
答案 1 :(得分:0)
正如@EJP所提到的,客户端和服务器应使用相同的testobject
类文件。
要验证它,请添加System.out.println("From client: " + to)
和System.out.println("From server: " + to)
以打印包含名称和类名称的对象的完整路径名。
此外,您可以使用关键字instance of
来确保在使用对象的类类型之前是您想要的。