2020年伊始,新冠病毒席卷全国,对人们的生活造成了严重的影响,成为了人们最受关注的话题。新冠病毒起源于武汉华南海鲜市场,在发现该冠状病毒具有传染性后,武汉作为国内第一个采取了应对措施的城市,然而由于该病毒具有高传染性、潜伏期长并且潜伏期可传染等特点,依然使得武汉成为了重灾区,具有大量的人员被该病毒感染。
此次疫情发生后,一方有难,八方支援,全国各地纷纷向武汉派出了支援队伍,为此次控制疫情作出相应的贡献,然而很不幸的是,由于该病毒具有较强的传染性,部分医护人员被感染,据报道称截止目前为止,已有逾3000名医护人员感染新冠状病毒。
如何对医护人员的安全进行保障?作为科技工作者,我们能做什么?
远程医疗作为新兴的技术,是对现有技术的整合,在国外具有40余年的发展历程(在我国刚刚起步),其主要的目的为提高诊断与医疗水平、降低医疗开支、满足广大人民群众保健需求的一项全新的医疗服务。
在线监测系统的基本框架
1
目前,远程医疗技术已经从最初的电视监护、电话远程诊断发展到利用高速网络进行数字、图像、语音的综合传输,并且实现了实时的语音和高清晰图像的交流,为现代医学的应用提供了更广阔的发展空间。本科做过机械设备实时监测相关的内容,其中,毕业设计的题目为《基于XML的远程设备监测诊断系统数据标准化模型设计》,文中对旋转机械设备进行分析(掌握设备常见的故障类型),通过传感器采集潜在故障区域的时域信号,并对相应的数据进行分析与处理,确定设备的运行状态,于此同时,采用XML文件对机械设备运行状态进行表述,建立了C/S数据传输网络构架,实现了XML文件的远程传输,基本的框架如下图所示:
远程医疗与系统状态监测具有部分相同点,系统搭建的具体过程如下图所示,其中,Client/Server模式远程在线监测与诊断系统由数据采集,数据分析处理、数据远程传输以及Client等多部分构成,主要的过程为:1、对病人(远程设备)进行分析,提取能表征人体是否健康的特征——体温(机械设备的振动信号);2、采用传感器(温度、加速度、压力、声音以及图像等)进行数据采集;3、基于现有数据对该病人(远程设备)进行诊治,得出是否患病的结论;4、确定需要传输的数据内容(比方说远程医生在诊断的时候,需要知道的数据包括时间、地点、体温等),传输给远端客户机;5、客户端对该数据进行显示。
XML文件远程传输
2
XML是一种标记语言,他是在HTML文件的基础上发展起来的,改善了HTML的一部分缺点,是一种开放的、自我描述的方式定义数据结构。XML是一种结构与数据相分离的一种文件,可以把结构和数据分离开来,可以表述病人(机械设备)的信息及状态,实现数据的存储、查看与处理的一种新方法。
传统的Client/Server结构体系一般包含数据库服务器、客户端两层数据传输结构,由客户端发起请求,服务器对客户端传输过来的请求进行分析、处理,具有较高的安全性以及数据传输效率;于此同时,Client/Server可以实现数据双向通信,具有较高的可扩展性以及可维护性。
远程在线监测:Client和Server之间传输XML文件的程序调试结果
基于Browser/Server的远程监测诊断
3
基于Browser/Server的远程在线监测与诊断系统跟传统的Client/Server模式和概念有所不同的是:
1、基于Browser/Server的远程在线监测与诊断系统不需要安装客户端软件,在客户端只需要有标准的浏览器,如Internet Explorer即可进行数据的传输,从而实现远程旋转机械的故障诊断与状态监测;
2、基于Browser/Server的远程在线监测与诊断系统就好像是多层的客户端/服务器模式,简化成三成结构,大大的简化了计算机的负载,减轻了系统维护的成本与工作量,可以为企业提高经济效益;
3、基于Browser/Server的远程在线监测与诊断系统可以采用Web技术,因此,我们只需开发、维护服务器端应用程序,对客户端的开发可以不用进行,这种方法大大减少了我们这个系统的管理、维护工作,降低了用户的总体成本;
4、客户端都是通过Web浏览器传输过来的服务器端的数据,因此,在不同的机器上界面一样,也就是说我们通过基于Browser/Server的远程在线监测与诊断模式实现了统一用户界面,方便不同系统间的信息交流。
5、所有的计算机上都有Web浏览器,因此,我们还可以通过这种数据传输模式实现跨平台操作。
6、由于Client端是标准的浏览器,用户操作实现了标准化,因此操作变得非常简单,进行数据的远距离传输。并且我们可以通过这种模式来利用互联网上信息资源,进而提高故障诊断的精确度。为现场的技术人员提供更加可靠地诊断。
7、并且Browser/Server模式还可以与多种网络服务,如E-mail、FTP进行组合使用。
XML文件传输程序
4
代码语言:javascript复制文件传输程序
客户端
package sterning;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
public class ClientTest {
private ClientSocket cs = null;
private String ip = "10.108.236.115";//服务器IP
private int port = 8821;
private String sendMessage = "Windwos";
public ClientTest() {
try {
if (createConnection()) {
sendMessage();
getMessage();
}
}catch (Exception ex) {
ex.printStackTrace();
}
}
private boolean createConnection() {
cs= new ClientSocket(ip, port);
try {
cs.CreateConnection();
System.out.print("连接服务器成功!" "n");
return true;
} catch (Exception e) {
System.out.print("连接服务器失败!" "n");
return false;
}
}
private void sendMessage() {
if (cs == null)
return;
try {
cs.sendMessage(sendMessage);
} catch (Exception e) {
System.out.print("发送消息失败!" "n");
}
}
private void getMessage() {
if (cs == null)
return;
DataInputStream inputStream = null;
try {
inputStream = cs.getMessageStream();
} catch (Exception e) {
System.out.print("接收消息缓存错误n");
return;
}
try {
//本地保存路径,文件名自动从服务器端继承来。
String savePath = "E:\";
int bufferSize = 8192;
byte[] buf = new byte[bufferSize];
int passedlen = 0;
long len=0;
savePath = inputStream.readUTF();
DataOutputStream fileOut = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream(savePath))));
len = inputStream.readLong();
System.out.println("文件的长度为:" len "n");
System.out.println("开始接收文件!" "n");
while (true) {
int read = 0;
if (inputStream != null) {
read = inputStream.read(buf);
}
passedlen = read;
if (read == -1) {
break;
}
System.out.println("文件接收了" (passedlen * 100/ len) "%n");
fileOut.write(buf, 0, read);
}
System.out.println("接收完成,文件存为" savePath "n");
fileOut.close();
} catch (Exception e) {
System.out.println("接收消息错误" "n");
return;
}
}
public static void main(String arg[]) {
new ClientTest();
}
}
建立ClientSocket辅助类
package sterning;
import java.net.*;
import java.io.*;
public class ClientSocket {
private String ip;
private int port;
private Socket socket = null;
DataOutputStream out = null;
DataInputStream getMessageStream = null;
public ClientSocket(String ip, int port) {
this.ip = ip;
this.port = port;
}
public void CreateConnection() throws Exception {
try {
socket = new Socket(ip, port);
} catch (Exception e) {
e.printStackTrace();
if (socket != null)
socket.close();
throw e;
} finally {
}
}
public void sendMessage(String sendMessage) throws Exception {
try {
out = new DataOutputStream(socket.getOutputStream());
if (sendMessage.equals("Windows")) {
out.writeByte(0x1);
out.flush();
return;
}
if (sendMessage.equals("Unix")) {
out.writeByte(0x2);
out.flush();
return;
}
if (sendMessage.equals("Linux")) {
out.writeByte(0x3);
out.flush();
} else {
out.writeUTF(sendMessage);
out.flush();
}
} catch (Exception e) {
e.printStackTrace();
if (out != null)
out.close();
throw e;
} finally {
}
}
public DataInputStream getMessageStream() throws Exception {
try {
getMessageStream = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
return getMessageStream;
} catch (Exception e) {
e.printStackTrace();
if (getMessageStream != null)
getMessageStream.close();
throw e;
} finally {
}
}
public void shutDownConnection() {
try {
if (out != null)
out.close();
if (getMessageStream != null)
getMessageStream.close();
if (socket != null)
socket.close();
} catch (Exception e) {
}
}
}
服务器程序
package sterning;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerTest {
int port = 8821;
void start() {
Socket s = null;
try {
ServerSocket ss = new ServerSocket(port);
while (true) {
String filePath = "E:\lib.xml";
File fi = new File(filePath);
System.out.println("文件长度:" (int) fi.length());
s = ss.accept();
System.out.println("建立socket链接");
DataInputStream dis = new DataInputStream(new BufferedInputStream(s.getInputStream()));
dis.readByte();
DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
DataOutputStream ps = new DataOutputStream(s.getOutputStream());
ps.writeUTF(fi.getName());
ps.flush();
ps.writeLong((long) fi.length());
ps.flush();
int bufferSize = 8192;
byte[] buf = new byte[bufferSize];
while (true) {
int read = 0;
if (fis != null) {
read = fis.read(buf);
}
if (read == -1) {
break;
}
ps.write(buf, 0, read);
}
ps.flush();
fis.close();
s.close();
System.out.println("文件传输完成");
}
} catch (Exception e)
{e.printStackTrace();
}
}
public static void main(String arg[]) {
new ServerTest().start();
}
}