扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
三、实战
1、服务端
首先,我们来构造服务端。考虑到本文的重点只是用XMLSocket 进行及时监控,而服务端知识来模拟生产系统,为了节省篇幅,我们对服务端的功能进行了简化,只要求其能够做到(使用Java语言完成服务端的编写)监听指定的端口,当有客户端请求时,启动一个新的线程与之建立连接。
try{
ServerSocket server = new ServerSocket(Integer.parseInt (args[0]));
while(true) {
System.out.println(" Start Listenning the TCP port " + Integer.parseInt(args[0]));
System.out.println("-------------------------------------------");
Socket client = server.accept();
System.out.println("Remote Host is "+ client.getInetAddress());
new ServerThread (client).start();
}
}catch (IOException ex){
ex.printStackTrace();
}
以上语句中,先是通过启动Java程序时传进来的端口参数,建立一个服务端套接字(ServerSocket)对象server,在随后的死循环中,调用其accept()方法监听指定的端口,如果有客户端连接请求时,生成一个套接字对象client,并用其作为参数生成并启动一个新的线程与客户端交互。
不断向客户端发送不同类型的有意义的XML数据,模拟生产系统的不同状态。考虑到功能的简便性,服务端只是每2秒向客户端发送一条随机类型的数据,而没有包括模拟生产系统及时的状态,如在某一时刻发生错误时,发送一条表示错误类型的数据,在实际设计编程中,基于本文中的例子,可以轻松扩展实现所需功能。
public void run() {
try {
while (true) {
System.out.println(this.getName() + "------" + i++);
d = new Date();
if(new Random().nextInt()*100 < 50){
str = "< MESSAGE TYPE=\"error\" TEXT=\"Hello, my name is Morgan!\" TIME=\"" + d.toString() + "\"/>";
} else {
str = "";
}
byte[] s= str.getBytes();
out.write(s);
out.write(0);
out.flush();
this.sleep(2000);
}
} catch (Exception ex){
ex.printStackTrace();
}
}
以上语句是自定义线程类ServerThread的run()方法,首先利用随机数条件if语句,随机产生不同类型的XML数据,接着用OutputStream输出流对象,输出XML数据的字节数组数据,为了表示该条数据已发送完成,再发送一个0字节,随后调用输出流的flush()方法清空缓存,让输出流立即发送数据。最后使线程暂停2秒钟,等线程再次执行时,循环以上步骤。
这样,在客户端就可以每2秒钟收到一条随机类型的XML数据。详见本文附带的程序源码。
在服务端,为了简便,只是随机向两种类型(normal类型和error类型)的数据:
< MESSAGE TYPE="error" TEXT=" 数据内容" TIME=" + 系统时刻+ / >"
< MESSAGE TYPE="normal" TEXT=" 数据内容" TIME=" + 系统时刻+ / >"
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者