Socket序列化对象
C
l
i
e
n
t
.
j
a
v
a
Client.java
Client.java
import java.io.IOException;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Vector;
public class Client {
Socket s;
public Client() {
try {
s = new Socket("127.0.0.1", 8888);
} catch (IOException e) {
e.printStackTrace();
}
}
public void sendRouter(){
Router rC = Router.getRouterC();
try {
// ObjectOutputStream o = new ObjectOutputStream(s.getOutputStream());
// o.writeObject(rC);
// o.flush();
PrintStream p = new PrintStream(s.getOutputStream());
p.println(rC);
p.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Client c = new Client();
c.sendRouter();
}
}
Server.java
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Server {
ServerSocket ss;
Socket s;
public Server() {
try {
ss = new ServerSocket(8888);
s = ss.accept();
ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
if (ois.available()!=-1){
Router rC = (Router) ois.readObject();
Router rB = Router.getRouterB();
Router.update(rB, rC);
}
}catch (ClassNotFoundException a){
a.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Server s = new Server();
}
}
如上即为我遇到的错误🙅,为啥子嘞?就是因为我Client用socket传送对象的时候使用的IO流不正确!!!!!太逗了!!序列化应该配套使用ObjectInputStream和ObjectOutputStream,!!!
配套使用其中的readObject和writeObject方法!!!!以及确保你传送的对象及其成员变量一定一定都要是implement了Serializable接口!!!!
只要Client.java中的ObjectOutoutStream的代码取消注释,再把PrintSteam流的代码注释,整个project重新编译一次运行就正常了!!!