服务器客户端间数据传输(最简单例子)
本地Send项目向Re项目传输数据
项目结构如下:
Send
项目为发送数据,Re
项目为接收数据
由于需要实体所以两个项目要有同样的实体类Student
Student.java
(两个Student
类代码完全相同)代码如下:
import java.io.Serializable;
public class Student implements Serializable {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Send.java
代码如下:
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class Send {
public static void main(String[] args) {
try {
// 本地主机 端口8001
Socket s = new Socket("localhost", 8001);
// 获取输出流
OutputStream os = s.getOutputStream();
// Student对象
Student stu = new Student();
// 写入学生年龄20
stu.setAge(20);
// 对象输出流
ObjectOutputStream oos = new ObjectOutputStream(os);
// stu对象写入oos输出流
oos.writeObject(stu);
// 清空oos流
oos.flush();
// oos os s 分别关闭
oos.close();
os.close();
s.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Recive.java
代码如下:
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
public class Recive {
public static void main(String[] args) {
try {
// 创建一个ServerSocket套接字对象,并绑定在8001端口上
ServerSocket ss = new ServerSocket(8001);
// 连接成功 将ss返回的Socket接收
Socket s = ss.accept();
// 输入流
InputStream is = s.getInputStream();
// 对象输入流
ObjectInputStream ois = new ObjectInputStream(is);
// 将对象从流中取出来
Student stu = (Student) ois.readObject();
// 输出年龄
System.out.println(stu.getAge());
// 关闭流
ois.close();
is.close();
s.close();
ss.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行时,先运行Recive.java
再运行Send.java
结果如下: