学习目标:
学会用dom4j解析xml
学习内容:
cs服务使用xml传输信息的全过程
创建一个car类对象,用作传输的元
public class Car {
String cname;
String color;
int price;
Car(String cname,String color,int price)
{
this.cname = cname;
this.color = color;
this.price = price;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
创建两个方法----创建xml文档和生成800辆车信息
1.生成800辆车信息
//获取八百辆车信息
public static List<Car> getCarMessage()
{
List<Car> cars = new ArrayList<Car>();
for(int i=0;i<800;i++)
{
Car car = new Car("car"+i,"红色",1000+i);
cars.add(car);
}
return cars;
}
2.创建xml文档
//动态创建XML文件
public static String createXML()
{
//创建XML文档对象
Document document = DocumentHelper.createDocument();
//创建节点
Element xml = DocumentHelper.createElement("xml");
//设置根节点
document.setRootElement(xml);
List<Car> cars = getCarMessage();
for(Car car:cars)
{
Element Car= DocumentHelper.createElement("Car");
Element cname = DocumentHelper.createElement("cname");
cname.setText(car.getCname());
Element color = DocumentHelper.createElement("color");
cname.setText(car.getColor());
Element price = DocumentHelper.createElement("price");
cname.setText(String.valueOf(car.getPrice()));
xml.add(Car);
Car.add(cname);
Car.add(color);
Car.add(price);
}
//xml转为String字符串且返回
return document.asXML();
}
创建服务器类
public class Server {
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(8888);
for(;;)
{
System.out.println("服务器开启");
Socket client = server.accept();
ServerThread serverThread = new ServerThread(client);
serverThread.start();
}
}
}
考虑到线程的并发,把高并发的代码写入线程中
public class ServerThread extends Thread{
Socket client;
public ServerThread(Socket client){
this.client=client;
}
@Override
public void run() {
try {
InputStream in = client.getInputStream();
OutputStream out = client.getOutputStream();
byte[] b = new byte[1024];
int sum;
String str = "";
while((sum=in.read(b))!= -1)
{
str+=new String(b,0,sum);
}
if(str.equals("getCarMessage"))
{
out.write(Method.createXML().getBytes());
in.close();
out.flush();
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
创建用户类
public class Client {
public static void main(String[] args) throws IOException {
Socket client = new Socket("localhost", 8888);
//创建客户输入流
InputStream in = client.getInputStream();
//获得客户输出流
OutputStream out = client.getOutputStream();
out.write("getCarMessage".getBytes());
//将流置于流末尾
client.shutdownOutput();
out.flush();
byte[] b = new byte[1024];
int sum;
String str = "";
while((sum=in.read(b))!=-1)
{
str+= new String(b,0,sum);
}
//吧服务端返回的800辆车信息储存在TXT中
FileOutputStream out2 = new FileOutputStream("D:\\IOtest\\lbj23.txt");
out2.write(str.getBytes());
in.close();
}
}
对服务器发出"getCarMessage"请求----请求800辆车信息
OutputStream out = client.getOutputStream();
out.write("getCarMessage".getBytes());
对服务器返回的800辆车信息进行处理
//吧服务端返回的800辆车信息储存在TXT中
FileOutputStream out2 = new FileOutputStream("D:\\IOtest\\lbj23.txt");
out2.write(str.getBytes());
结果验证
运行服务器后,再运行用户,即用户对服务器进行一次请求,打开保存用户接受到的800辆车信息的TXT中,可看到800辆车确实在里面,说明整个CS过程成功了
学习时间:
2021/1/22
14.30~18:00
学习产出:
提示:这里统计学习计划的总量
例如:
1、 技术笔记 2 遍
2、CSDN 技术博客 3 篇
3、 学习的 vlog 视频 1 个