java网络(socket)中传输序列化对象
Person类,注意(两个项目中的Person类字节码要相同)
package socket;
import java.io.Serializable;
public class Person implements Serializable{
/**
* 序列化id
*/
private static final long serialVersionUID = -6172176307319540879L;
private String name;
private Integer age;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Person() {
super();
// TODO Auto-generated constructor stub
}
public Person(String name, Integer age, String address) {
super();
this.name = name;
this.age = age;
this.address = address;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", address=" + address + "]";
}
}
服务端代码:
package socket;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServerTest {
public static void main(String[] args) throws Exception {
// 监听指定的端口
int port = 8989;
ServerSocket server = new ServerSocket(port);
System.out.println("服务端等待连接");
// server将一直等待连接的到来
Socket socket = server.accept();
InputStream inputStream = socket.getInputStream();
ObjectInputStream in=new ObjectInputStream(inputStream);
Person p = (Person) in.readObject();
System.out.println("收到客户端消息:" +p);
//返回给客户端消息
OutputStream outputStream = socket.getOutputStream();
Person s=new Person("服务端",102,server.getInetAddress().getHostAddress());
//s为传送对象
ObjectOutputStream out=new ObjectOutputStream(outputStream);
out.writeObject(s);
out.flush();
inputStream.close();
outputStream.close();
out.close();
in.close();
socket.close();
server.close();
}
}

客户端代码:
package socket;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
public class SocketClient {
public static void main(String args[]) throws Exception {
// 要连接的服务端IP地址和端口
String host = "127.0.0.1";
int port = 8989;
// 与服务端建立连接
Socket socket = new Socket(host, port);
// 建立连接后获得输出流
OutputStream outputStream = socket.getOutputStream();
Person p=new Person("客户1",12,socket.getInetAddress().getHostAddress());
//p为传送对象
ObjectOutputStream o= new ObjectOutputStream(socket.getOutputStream());
o.writeObject(p);
o.flush();
//通过shutdownOutput高速服务器已经发送完数据,后续只能接受数据
socket.shutdownOutput();
InputStream inputStream = socket.getInputStream();
ObjectInputStream in=new ObjectInputStream(inputStream);
Person s= (Person) in.readObject();
System.out.println("服务端回复消息:" + s);
in.close();
o.close();
inputStream.close();
outputStream.close();
socket.close();
}
}
