机向服务器发送信息的通道,输入流是服务器向客户机传递命令和参数的途径;再定义数据缓存区,用于把服务器传过来的命令和参数与其它程序段进行交互。在整个
程序段中用try catch语句进行异常捕获。
服务器段的程序编制应与客户端程序的编制相适应,由于一个远程控制机可以控制多台现场工控机,所以服务器程序必须采用多线程机制,这也是Java语言的一大特色。服务器端的
程序编写如下:
public class serverclass
{public static void main(String args)
{ boolean listen;
try {
ServerSocket serversocket =new ServerSocket(5555);
}catch(IOException e){};
while(listen)
{
Socket agentsocket=serversocket.accept();
}catch(IOException e){};
new serverthread(agentsocket).start();
.
}}
class serverthread extends Thread{
Socket socket=null;
serverthread(Socket socket)
{super("serverthread");
this.socket=socket;}
public void run(){
try{
DataInputStream is=new DataInputStream(new BufferedOutputStream (socket. getOutputStream()));
PrintStream os=new PrintStream (new BufferedOutputStream (socket.getOutputStream (),5555),false);
.
}catch(IOException e){}; }
该程序段由两个类组成:主类和线程类。主类负责建立服务器套接字server socket,端口号必须与客户机的端口号一致,然后通过server socket的accept方法创建一个套接字接口,专门处理与客户机的通信;线程类用于创建一个新的线程,负责处理各个现场工控机的输入和输出请求。在线程类程序段中,首先创建一个构造方法,用于初始化一个新的线程,然后再定义一个输入和输出流。该服务器程序的设计是以各客户程序用同一个端口号向服务器发出服务请求,服务器
程序在端口处侦听各个客户的请求,创建多个线程,依次处理。当然各个客户端也可以采用不同的端口号向服务器发出请求,服务器相应地也创建不同端口号的线程与端口号一致的客户端进行通信。
远程控制主机服务器程序必须具有与数据库进行动态交互的能力。数据库中存放着大量的现场数据以及控制现场操作的参数和命令等。服务器
程序中的某一线程体负责对数据库的存取、修改和维护等操作,Java语言通过JDBC实现与数据库的连接,该功能类的实现方法如下:
public class database
{public void drivedata()
{String url="JDBC:odbc:component";
.
try{
Class.forName("sun.jdbc.odbc.JDBCODBCDriver");
Connection con=DriverManager.getConnection(url);
.
}catch(SQLException se){};
}
该程序段最主要的功能是加载JDBC数据库驱动程序,使得Java语言能够通过驱动
程序访问数据库。
4 利用Java语言的本地方法技术
由于Java语言的跨平台特性,所以使得Java语言无法操作硬件。对智能节点的控制只能采用第三方语言进行,例如C或汇编语言。而整个工控机的通信部分由Java语言编写,为实现远程主机对智能节点的控制,就必须实现Java语言与其它语言的结合。令人欣慰的是Java语言扩充了这方面的功能,可以与C和C++语言完美无缺地结合起来,这虽然在某种程度上牺牲了移植性,却使Java语言能够和具体的环境打交道,具备了驱动硬件的能力。在本文所讨论的例子中,PCL839卡的应用和驱动程序是用C语言开发的,Java语言把C语言编制的
程序做成本地方法体,从而实现对PCL839卡的控制。
对智能节点的驱动程序用C语言编写,程序中所采用的函数大部分是研华公司开发