基于Java的远程桌面监控源代码

基于Java的远程桌面监控源代码


2024年6月18日发(作者:)

基于Java的远程桌面监控源代码

来源: 熊哲的日志

import .*;

import ;

import ;

import yout;

import Layout;

import ;

import ;

import ;

import dress;

import .*;

import Listener;

import Event;

import Adapter;

import Event;

import pter;

import nt;

import tMutableTreeNode;

import tTreeCellRenderer;

import tTreeModel;

import th;

import de;

import ;

import con;

import t;

public class midClient

{

public static void main(String[] args) throws IOException

{

try{

kAndFeel("

wsLookAndFeel");

}

catch(Exception e1){}

new Ctree();

}

}

class Ctree extends JFrame implements ActionListener

{

boolean disConnect=false;

boolean passOk=true;

boolean startPort=false;

boolean DialogApp=false;

boolean existFile;

FileOutputStream fo;

//*************************************1

JMenuBar menu=new JMenuBar();

JMenu mnuFile =new JMenu("文件");

JMenuItem AddComputer =new JMenuItem("添加新主机");

JMenuItem mnuFileExit =new JMenuItem("退出");

//*************************************2

JButton Addcomputer=new JButton("隐藏主机");

JLabel Host=new JLabel("选择主机");

JPanel H_A=new JPanel();

Choice Address=new Choice();

JLabel ConnectIp=new JLabel(" 服务器IP地址 ");

JTextField ConnectIpText=new JTextField(14);

//*************************************3

DefaultMutableTreeNode Root = new DefaultMutableTreeNode("远程控制管

理器");

JTree tree = new JTree(Root);;

JPopupMenu popM=new JPopupMenu();

JMenuItem cy_load=new JMenuItem("下载");

JMenuItem cy_delect=new JMenuItem("删除");

JMenuItem cy_refurbish=new JMenuItem("刷新子项");

JFileChooser Jsave=new JFileChooser();

JScrollPane treePane=new JScrollPane();

DefaultTreeCellRenderer cellRenderer=null;

DefaultMutableTreeNode node1=null;

DefaultTreeModel treeModel;

File selectFile;

//*************************************4

Socket ClientSocket=null; //声名一个套接字

String HostName=null;

int IPPort=0;

PrintWriter out=null;

BufferedReader in=null;

//子窗口按钮

Dialog AddHost=null;

JTextField Computer=null;

JTextField Port1=null;

JButton ok=new JButton("确定");

JButton cancel=new JButton("取消");

Dialog listen =null;

JPasswordField passw =new JPasswordField(10);

JButton ok1 =new JButton("确认");

JButton cancel1 =new JButton("取消");

File inputFile =new File("d:/");

File[] list=ots();

int Jrate=0;

int finish=0;

int ByteNum;

String fileName;

boolean copy=false;

public Ctree()

{

this("远程管理器");

}

public Ctree(String Title)

{

super(Title);

titlephone=aultToolkit().createImage("./icons/");

nImage(titlephone);

e(600,500);

nuBar(menu);

Image

wsRootHandles(true);

setFont();

addWindows();

// table(false);

table(false);

addListen();

try

{

File AdressFile=new File("");

if(!())

{

NewFile();

}

FileReader readIn=new FileReader(AdressFile);

BufferedReader bufin=new BufferedReader(readIn);

String choiceList=null;

String address,port;

while((choiceList=ne())!=null)

{

(new DefaultMutableTreeNode(choiceList));

(choiceList);

}

();

();

ible(true);

}

catch(Exception E){}

}

//******************************设置字体

public void setFont()

{

t(new Font("宋体",,12));

t(new Font("宋体",,12));

t(new Font("宋体",,12));

//2

t(new Font("宋体",,13));

t(new Font("宋体",,13));

t(new Font("宋体",,13));

t(new Font("宋体",,13));

t(new Font("宋体",,13));

//pop

cy_t(new Font("宋体",,12));

cy_t(new Font("宋体",,12));

cy_t(new Font("宋体",,12));

}

//******************************加入窗口容器

public void addWindows()

{

(AddComputer);

arator();

(mnuFileExit);

(mnuFile);

H_(Addcomputer);

H_(Host);

H_(Address);

H_(ConnectIp);

H_(ConnectIpText);

Height(21);

lRenderer(new EnhancedTreeCellRenderer());

cellRenderer = (DefaultTreeCellRenderer)lRenderer();

t(new Font("宋体",,14));

kgroundNonSelectionColor();

kgroundSelectionColor();

derSelectionColor();

tNonSelectionColor();

tSelectionColor();

getContentPane().add(new JScrollPane(tree),);

(cy_load);

(cy_delect);

arator();

(cy_refurbish);

(popM);

//*****************

getContentPane().add(H_A,);

}

//****************************监听信息

public void addListen()

{

ionListener(this);

ionListener(this);

ionListener(this);

//pop

cy_ionListener(this);

cy_ionListener(this);

cy_ionListener(this);

seListener(new HandleMouse(this));

dowListener(new WinAdptClient(this));

//AddHost中的Button监听

ionListener(this);

ionListener(this);

//listen中的Button监听

ionListener(this);

ionListener(this);

}

/**********************************监听事件代码******************************/

public void actionPerformed(ActionEvent e)

{

if(rce()==AddComputer)

{

dialog();

}

else if(rce()==Addcomputer)

{

if(ort)

{

if(ionCommand()=="隐藏主机")

{

n("hideServer");

();

ionCommand("显示主机");

e("显示主机");

UI();

}

else

{

n("appearServer");

();

ionCommand("隐藏主机");

e("隐藏主机");

UI();

}

}

}

else if(rce()==mnuFileExit)

{

saveInit();

quit();

e();

(0);

}

else if(rce()==cy_refurbish)

{

update();

}

else if(rce()==cy_load)

{//要把文件路径给传过去

connectThread star=new connectThread(this);

();

}

else if(rce()==cy_delect)

{

try

{

int parameter=nfirmDialog(null,

"是否删除文件 "+f(ectionPath()),"删除

["+HostName+"]",_NO_OPTION);

if(parameter==0)

{

String str=f(ectionPath());

n("&delect&");

();

// n(str);

n(str);

();

str=ne();

if(("1"))

{

treeModel = (DefaultTreeModel)el();

TreePath treepath = ectionPath();

if (treepath != null)

{

DefaultMutableTreeNode selectionNode

(DefaultMutableTreeNode)

tPathComponent();

TreeNode parent = (TreeNode)ent();

if (parent != null)

{

NodeFromParent(selectionNode);

// ();

}

}

=

}

}

}

catch(IOException E)

{}

}

else if(rce()==ok1)

{

e();

}

else if(rce()==cancel1)

{

passOk=false;

HostName=null;

t("");

n("&exit&");

();

e();

// quit();

}

else if(rce()==ok)

{

addchoice();

}

else if(rce()==cancel)

{

e();

}

}

/**********************修改端口***********************/

public void dialog()

{

AddHost=new Dialog(this,"添加远程主机",true);

dowListener

(

new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

e();

}

}

);

JPanel p1=new JPanel(new BorderLayout());

JPanel p2=new JPanel(new FlowLayout());

JPanel p11=new JPanel();

JPanel p12=new JPanel();

// Panel p13=new Panel(new FlowLayout());

JLabel label1=new JLabel("主机 : ");

Computer=new JTextField(12);

JLabel label2=new JLabel("端口 : ");

Port1=new JTextField(12);

// JLabel label3=new JLabel("密码 : ");

// JPasswordField mima=new JPasswordField(13);

Listener(new KeyLis(this,2));

Listener(new KeyLis(this,2));

t(new Font("宋体",,12));

t(new Font("宋体",,12));

t(new Font("宋体",,12));

t(new Font("宋体",,12));

t(new Font("宋体",,12));

t(new Font("宋体",,12));

(ok);

(cancel);

(label1);

(Computer);

(label2);

(Port1);

// (label3);

// (mima);

("North",p11);

("Center",p12);

// ("South",p13);

("North",p1);

("Center",p2);

//nds(200,150,400,130);

e(150,150);

();

}

//服务器文件存储。。。。。。

public void down()

{

try

{

int result;

existFile=false;

result=veDialog(treePane);

if(result==E_OPTION)

{

selectFile = ectedFile();

fileName=f(selectFile);

//取得选择的文件

if(())

{

String message = "文件已经存在,要覆盖吗?";

Object[] saveButton = {"OK","NO"};

JOptionPane save= new

JOptionPane(message,G_MESSAGE,

T_OPTION,null,saveButto

n);

JDialog saveD = Dialog(save,"保存文件"); //产生

saveD 对话框

ible(true);

Object push = ue();

if(push == saveButton[0])

{

existFile=true;

}

}

else

{

existFile=true;

}

if(existFile)

{

File outputFile = new File(olutePath());

fo=new FileOutputStream(outputFile);

String str=f(ectionPath());

n(str);

n("&download&");

();

n(str);

();

}

}

}

catch(IOException e)

{}

}

BufferedInputStream bufin;

public void connect()

{

try

{

disConnect=false;

ClientSocket=new Socket(HostName,IPPort);

InetAddress HostAddress=tAddress();

t(ng());

out=new PrintWriter(putStream(),true);

in=new BufferedReader(new

InputStreamReader(utStream()));

bufin=new BufferedInputStream(utStream());

if(ldCount()>0)

{

n("&pass&");

();

}

else

{

String s1=new String("&nopass&");

while(("&nopass&"))

{

CP_dialog();

if(passOk)

{

n(t());

();

t("");

s1=ne();

if(("&nopass&"))

{

ssageDialog(getContentPane(),

"密码错误,请重输");

}

}

else

{

disConnect=true;

();

();

();

ssageDialog(getContentPane(),

"目前处于非连接状态,请点击主机I重新建立连接");

break;

}

}

if(!disConnect)

{

startPort=true;

String s=ne();

while(!("&&over&&"))

{

(new DefaultMutableTreeNode(s));

s=ne();

}

n("over");

}

}

}

catch(Exception e){}

}

//密码输入窗口

public void CP_dialog()

{

passOk=true;

JLabel host =new JLabel("主机");

JTextField hostText =new JTextField(10);

table(false);

JLabel ipPort =new JLabel("端口");

JTextField portText =new JTextField(10);

table(false);

JLabel pass =new JLabel("密码");

t(HostName);

t(f(IPPort));

listen=new Dialog(this,"登陆服务器",true);

dowListener

(

new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

passOk=false;

HostName=null;

t("");

n("&exit&");

();

e();

}

}

);

JPanel p1=new JPanel(new BorderLayout());

JPanel p11=new JPanel();

JPanel p12=new JPanel();

JPanel p13=new JPanel();

JPanel p2=new JPanel(new FlowLayout());

t(new Font("宋体",,12));

t(new Font("宋体",,12));

t(new Font("宋体",,12));

t(new Font("宋体",,12));

t(new Font("宋体",,12));

t(new Font("宋体",,12));

(host);

(hostText);

(ipPort);

(portText);

(pass);

(passw);

Listener(new KeyLis(this,1));

("North",p11);

("Center",p12);

("South",p13);

(ok1);

(cancel1);

("North",p1);

("Center",p2);

e(150,160);

();

}

//接收文件流

public void startCopy()

{

try

{

String strnum=ne();

ByteNum=nt(strnum);

byte[] data=new byte[4096];

copy=true;

try

{

(1);

}

catch(Exception e3){}

BufferedInputStream

BufferedInputStream(utStream());

//定义一个输入流来接收文件的字节流

bufin=new

int b;

int j=0;

Jrate=0;

finish=0;

while(finish++

{

// if((b=())==-1){n(b+" "+finish); break;}//

为什么不会出现-1

b=();

if(b<=0)

data[j]=(byte)(b);

else

data[j]=(byte)(b-256);

if(j++>=4095)

{

(data,0,4096);

();

j=0;

Jrate++;

}

}

(data,0,j);

();

// (data,0,1048576-j+1);

();

copy=false;

}

catch(IOException e){}

}

//保存IP地址及端口

public void saveInit()

{

int yi=0;

try

{

File AdressSave=new File("");

FileWriter readOut=new FileWriter(AdressSave);

BufferedWriter bufOut=new BufferedWriter(readOut);

while(yi

{

(m(yi));

e();

();

yi++;

}

();

();

n("save finished");

}

catch(Exception e2){}

}

public void quit()

{

try

{

if(startPort)

{

n("Bye_Bye");

();

();

();

();

}

}

catch(IOException end){}

}

//增加主机个数

public void addchoice()

{

String HP_get=null;

boolean issame=false;

HP_get=t()+":"+t();

for(int yi=0;yi

{

if(HP_(m(yi)))

issame=true;

}

if(!issame)

{

(HP_get,mCount());

treeModel = (DefaultTreeModel)el();

DefaultMutableTreeNode

parentNode=(DefaultMutableTreeNode)t();

n(f(parentNode));

(new

DefaultMutableTreeNode(m(mCount()-1)));

();

}

e();

}

public void update()

{

TreePath currentPath=null;

currentPath=ectionPath();

node1 = (DefaultMutableTreeNode)(tPathComponent());

if(!())

AllChildren();

treeModel = (DefaultTreeModel)el();

((TreeNode)tPathComponent());

{

try

{

DefaultMutableTreeNode node2=null;

n("addClientTree");

();

n(f(currentPath));

();

String s=new String("");

String F_ornot=new String("");

s=ne();

//node2=new DefaultMutableTreeNode(s);

//n(s);

if(("&isFile&"))

{

String filepath=ne();

n(filepath);

int parameter=nfirmDialog(null,

"打开或运行 "+filepath,"

if(parameter==0)

打开

["+HostName+"]",_NO_OPTION);

{

n("&execute&");

();

}

else

{

n("&inexecute&");

();

}

s=ne();

}

while(!("&&over&&"))

{

F_ornot=ne();

// n(F_ornot);

if(node2==null)

{

if(F_("directory"))

node2=new DefaultMutableTreeNode(s);

else

node2=new DefaultMutableTreeNode(s,false);

(node2);

}

else if(F_("directory"))

{

(new DefaultMutableTreeNode(s,true));

// n(F_ornot+" add directory");

}

else //if(F_("file"));

{

(new NodeInformation(s,false));

// n(F_ornot+" add file");

}

s=ne();

}

if(node2!=null)

PathToVisible(new TreePath(h()));

}

catch(Exception e1){}

}

}

}

我的win7,可以查到mstsc /edit 可以编辑.rdp文件,所以,可以这样:

1. 本机创建一个空文本文件,扩展名改为rdp。比如d:

2. 命令行执行

mstsc /edit d:

3. 在弹出窗口中,输入要连接的机器ip、用户名,以及其他连接设置,点击保存按钮

保存。

不过这里没有看到输入密码的,必须连接上才能输入密码。

4. 在java代码中:

time().exec("mstsc d:");

假如

IP:192.168.0.2

用户名是:admin

密码是:123

public class Mian {

public static void main(String[] args) {

try {

//time().exec("mstsc");

time().exec("");

} catch (IOException e) {

tackTrace();

}

}// 如何传IP、密码、用户名

}

SWFTools 命令

2009-04-22 14:41 5317人阅读 评论(2) 收藏 举报

SWFTools提供了一系列将各种文件转成swf的工具:

具体的功能就顾名思义了。

其中把pdf转成swf的工具就是pdf2swf了。在命令行中运行pdf2swf

一般能满足需求。而命令行参数可以通过pdf2swf -f得到:

• -h , –help Print short help message and exit 打印帮助信

• -V , –version Print version info and exit 打印版本号

• -o , –output Direct output to . If contains

‘13568621′ (), then each page指定输出的swf文件名

• -p , –pages range Convert only pages in range with 1-20

• or 1,4,6,9-11 or

指定转换的页面范围,使用的页码描述方法与打印机打印文件时候的选页一样

• -P , –password password Use password for deciphering the pdf.指定打开

pdf的密码

• -v , –verbose Be verbose. Use more than one -v for greater effect.

转换时输出详细的内容

• -z , –zlib Use Flash 6 (MX) zlib compression.使用Flash 6的zlib压

缩机制

• -i , –ignore Allows pdf2swf to change the draw order of the pdf.

This may make the generated允许程序修改pdf的绘制顺序,可能会导致结果与原来有

差异

• -j , –jpegquality quality Set quality of embedded jpeg pictures to quality. 0

is worst (small), 100 is best (big). (default:85)设置转换其中的jpeg图片的质量,从0

到100,默认值是85。

• -s , –set param=value Set a SWF encoder specific parameter. See

pdf2swf -s help for more information. 设置SWF转码时候的参数,具体参数可以用

pdf2swf -s help获取

• -w , –samewindow When converting pdf hyperlinks, don’t make

the links open a new window. 设置转换后的swf打开原pdf中的连接时使用相同

的窗口

• -t , –stop Insert a stop() command in each page. 在每页结

尾添加一个stop()命令

• -T , –flashversion num Set Flash Version in the SWF header to

num. 设置SWF所使用的flash版本号

• -F , –fontdir directory Add directory to the font search

path. 指定字体文件所在路径

• -b , –defaultviewer Link a standard viewer to the swf file. 指定

默认的swf导航文件,用来翻页、放大缩小等等

• -l , –defaultloader Link a standard preloader to the swf file which will

be displayed while the main swf is loading. 指定默认的swf加载文件,用来显示加

载进程效果

• -B , –viewer filename Link viewer filename to the swf file. 指定swf导航

文件,作用同-b

• -L , –preloader filename Link preloader filename to the swf file. 指定

swf加载文件,作用同-l

• -q , –quiet Suppress normal messages. Use -qq to suppress

warnings, also. 不打印普通信息,用-qq就不打印警告信息。

• -S , –shapes Don’t use SWF Fonts, but store everything as shape.

不使用字体,所有都转为形状。

• -f , –fonts Store full fonts in SWF. (Don’t reduce to used

characters). 在swf中保存全部字体。

• -G , –flatten Remove as many clip layers from file as possible. 在文

件中尽量去除影片层,合并它们

• -I , –info Don’t do actual conversion, just display a list of all

pages in the PDF. 不做实际转换,仅显示PDF的信息。

• -Q , –maxtime n Abort conversion after n seconds. Only available

on Unix. 如果运行时间超时则退出。

然后看看-s都可以设置些什么:

PDF Parameters:

PDF device global parameters:

fontdir= a directory with additional fonts 指定字体目录, 与1级参数的-F相若

font= an additional font filename 增加额外的字体文件

pages= the range of pages to convert (example: pages=1-100,210-) 指定页面

范围,与1级参数的-p相若

zoom= the resolution (default: 72) 指定分辨率,默认为72dpi

languagedir= Add an xpdf language directory 增加一个xpdf的语言目录,对非

西欧字符有用

multiply= Render everything at the resolution 在几倍分辨率下渲染

poly2bitmap Convert graphics to bitmaps 把其中的图形转成点阵

bitmap Convert everything to bitmaps 把所有内容转成点阵(包括字体)

SWF Parameters:

SWF layer options:

jpegsubpixels= resolution adjustment for jpeg images (same as

jpegdpi, but in pixels) jpeg图片的分辨率

ppmsubpixels= resolution adjustment for lossless images (same

asppmdpi, but in pixels) 无损图片的分辨率

subpixels= shortcut for setting both jpegsubpixels and

ppmsubpixels 快速设置上两个参数

drawonlyshapes convert everything to shapes (currently broken) 所有

都转成图形

ignoredraworder allow to perform a few optimizations for creating

smaller SWFs 允许执行一些小优化

linksopennewwindow make links open a new browser window 链接打开新窗

linktarget target window name of new links 新链接窗口的名称

linkcolor=

linknameurl Link buttons will be named like the URL they refer to (handy

for iterating through links with actionscript) 链接名称与链接URL一致

storeallcharacters don’t reduce the fonts to used characters in the output

file 保存所有的字符字体

enablezlib switch on zlib compression (also done if flashversion>=7)

使用zlib压缩

bboxvars store the bounding box of the SWF file in actionscript

variables 在as中保存swf的区域大小

dots Take care to handle dots correctly 保存单点显示

reordertags=0/1 (default: 1) perform some tag optimizations 执行某些tag

优化

internallinkfunction= when the user clicks a internal link (to a

different page) in the converted file, this actionscript function is called 内部链接函

数,如果点击一个内部链接,将调用该actionscript函数

externallinkfunction= when the user clicks an external link (e.g.

/) on the converted file, this actionscript function is called 外部

链接函数,如果点击一个外部链接,将调用该actionscript函数

disable_polygon_conversion never convert strokes to polygons (will remove

capstyles and joint styles) 不要将笔画转成多边形

caplinewidth= the minimum thichness a line needs to have so

that capstyles become visible (and are converted) 线条最低转换宽度,比这个

细的线条将不转换

insertstop put an ActionScript “STOP” tag in every frame 在swf

的每个桢中添加stop()函数

protect add a “protect” tag to the file, to prevent loadingin the

Flash editor 增加protect标签,禁止在flash中加载该swf

flashversion= the SWF fileversion (6) 设置最低swf版本

framerate= SWF framerate 设置桢率

minlinewidth= convert horizontal/vertical boxes smaller than

thiswidth to lines (0.05)将宽度少于某值的矩形转成线条

simpleviewer Add next/previous buttons to the SWF 使用简单的导航

animate insert a showframe tag after each placeobject (animate draw

order of PDF files)

jpegquality= set compression quality of jpeg images 设置jpeg的压

缩质量

splinequality= Set the quality of spline convertion to value (0-100,

default: 100). 设置样条曲线的转换质量

disablelinks Disable links. 禁止链接

在含中文的pdf转换时会遇到一些麻烦,具体的解决方法:(javaeye上的文字)

1. 下载swftools:/

下载xpdf xpdf-chinese-simplified

下载两个中文字体文件 字体文件

2 .安装swftools 至任意路径

解压缩xpdf 至任意路径

解压缩中文字体至xdpf/chinese-simplified/CMap文件夹下

3. 修改xpdf下xpdfrc文件 将cidToUnicode 等路径改为本机路径,

修改xpdf下chinese-simplified/add-to-xpdfrc文件 同上

4. 打开命令行窗口: pdf2swf -o 输出文件路径 -t 输入文件路径 -s

languagedir=xpdf路径/chinese-simplified

有些pdf中的图形转换效果不好,会产生过多shape,这种情况下可以使用 -s

poly2bitmap 的参数,将图形转成点阵。生成的swf尺寸少了。

带简单导航的:

pdf2swf -o -z -s flashversion=7 -s simpleviewer -t

带复杂导航的:

pdf2swf -o -z -B -s flashversion=7 -t -s

languagedir=D:/SWFTools/xpdf-chinese-simplified/xpdf/chinese-simplified

基于触摸屏的远程控制的探讨与实现

• 作者:安刚

• 出处:

• 阅读:2455

• 发布时间:2007-6-11 9:22:00

• 供稿:佛山伟力塑料机械有限公司

[关键词]:触摸屏 远程控制 WINCE Movicon 基于触摸屏的远程控制的探讨与实

现 安刚 佛山伟力塑料机械有限公司

1 引言

近年来,随着触 摸屏的广泛使用和宽带在企业内的普及 ,越来越多的工厂对设备间

的连网能力和实时远程通信提出了要求。如何在现有的网络基础上,在不增加太多成本的

情况下实现远程控制,以及对工厂实时数据的访 问,成为众多的设备制造厂家需要解决的

问题。传统的远程控制多数仅局限于对PLC程序的修改或有限的数据采集,不能实现异地

操作。虽然部分监控软件能实现 真正意义上的远程控制,但不仅需要购买额外的软件,价

格昂贵,而且实现起来相当麻烦。由意大利Progea公司开发的组态软件Movicon,其内

置的 Web Client功能带来了全新的改变。它基于JAVA瘦客户机技术, 使用浏览器通过

internet或intranet访问Movicon的数据. 该功能集成在Movicon软件中,无须购买其他

任何软件, 利用Movicon Web Client技术, 使用IE浏览器就可以浏览、控制Movicon

监控站的全部数据, 从而极大的降低了管理、维护及软件的成本, 提高了工厂的生产率.

2 设计方法

2.1 硬件选择

要实现远程控制,硬件平 台必须支持以太网接入,这样才能做为Web服务器为客户

机提供Web支持和实时数据。我们选用VIPA TPC610系列10.4寸彩色触摸屏,该系列

触摸屏具有两个100M以太网端口,支持冗余和路由。即使现有网络内的交换机不具有剩

余的端口,也可以通过 将触摸屏接入交换机,再将其它网络设备如电脑等接入触摸屏的第

二个以太网口的方式,实现Internet的同时接入。另外,该系列触摸屏内嵌WINCE 5.0

操作系统,搭建了Web Server,为实现远程控制建立了良好的基础。

一个简单的,具有代表性的中小企业网络结构如图1所示。图中我们 将接受远程控制

的触摸屏接入企业内部以太网,再经过路由器和防火墙接入Internet,实行远程控制的电

脑作为客户端,也通过Internet实现对触 摸屏的操作。客户端可以是一台单机,也可以

是来自以太网,或者是通过无线接入的便携式电脑。

图1 构成远程控制的网络结构图

2.2 软件设计

2.2.1 触摸屏中的设置

要 使用触摸屏的Web服务器功能,需要先为其配置好IP地址及DNS服务器地址。虽

然市面上大部分的路由器已经内置了DHCP动态IP地址分配功能,但因为 触摸屏是做为

服务器连接在内网,且需要在路由器上为其开放特定的端口,所以在这里为它指派固定IP

地址,而不使用动态分配的方式。该操作在WINCE的 “Control Panel”---->“Network

Connections”中设置,如图2和图3所示:

图2 设置触摸屏的IP地址

图3 设置DNS服务器地址

在 上面的图中,已经设置了触摸屏的IP地址为:192.168.1.33,子网掩码为

255.255.255.0,默认网关为:192.168.1.1,首 选DNS服务器地址为202.96.128.86,

第二DNS服务器为202.96.128.166。首选WINS服务器和第二WINS服务器不用填写。

需 要注意的是,触摸屏的IP地址,子网掩码应该和它所处的局域网内的其它计算机

在同一网段,默认网关是路由器的IP地址。首选DNS服务器和第二DNS服务 器应该是

当地ISP所提供的地址,以佛山电信的ADSL为例,其首选DNS服务器地址为

202.96.128.86,第二DNS服务器为 202.96.128.166。

经过以上设置后,在同一内网中的计算机已经可以使用IE浏览器访问到触摸屏了,在

IE地址栏中输入“192.168.1.33”,就可以看到一个默认的HTML网页。如图4所示:

图4 默认HTML页面

2.2.2 MOVICON中的设置

使用MOVICON X2版组态软件,先在项目中启用网络服务器,如图5所示。这样,远

程控制功能才会随项目一起启动,否则,无论如何也不能连接到触摸屏中的用户操作画面。

图5 为远程控制启用网络服务器

如果我们希望客户端浏览到的第一个画面是触摸屏中的《Index》页面,则点击“资

源”,右击“Index”窗口,在弹出的菜单中选择“以此窗口建立WebClientX html网

页”,如图6所示。

图6 建立WebClientX html页面

然后根据程序提示输入你希望该画面在客户端显示的窗口大小,比如宽度800象素,

高度600象素。虽然可以支持客户端的全屏显示,但最好设置为和触摸屏显示大小一样的

象素,以免出现客户端显示图形变形。

最后程序提示是否需要创建IIS虚拟目录,选择“NO”即可。

现 在可以在项目所在的RESOURCES文件夹下找到一个文件和一个

文件。将这两个文件复制到触摸 屏的FlashdiskWWWPUB目录

下,删除原来的文件,将文件改名为,重新上传

项目 到触摸屏,运行项目,在局域网内已经安装Java运行环境的计算机上就可以用IE浏

览器访问触摸屏内的所有控制画面和数据了。

图7 通过IP地址访问触摸屏控制画面

2.2.3 通过Internet对触摸屏进行访问

若 在局域网范围内通过IE浏览器访问触摸屏,直接在浏览器地址栏输入触摸屏的 IP

地址即可。 如果是通过 Internet,由于企业内部网络大部分情况是通过路由器接到

Internet,而且出于经济性考虑,上网方式是 ADSL,IP 地址是动态分配的,是变化的,

通过输入IP地址来访问触摸屏就显的很不方便了。由于习惯上人们喜欢使用域名的方式来

访问站点,这里使用一个免费二级域名和 动态域名解析解决这个问题。目前提供二级域名

的网站很多,我们使用知名度较高的花生壳。在花生壳注册后,就可以申请到免费的二级

域名(本例中使用的二级域 名为:),下载花生壳客户端,并将其

安装到和触摸屏在同一局域网内的任意一台计算机上。然后运行花生壳 客户端,在成功登

录后,所有来自于互连网对的访问都将被指向到触摸屏所在网络

的路由器,然而这样还不能 访问到触摸屏的控制画面,还需要在路由器上设置虚拟服务器,

为触摸屏开放80端口,12233-12534端口。以TP-Link路由器为例,设置虚拟服 务器

的界面如下:

图8 设置虚拟服务器,为触摸屏开放端口

注:上图中的21端口用于FTP上传项目,对于远程控制不是必需的。

经过以上设置后,所有来自于互连网,对的访问都将被指向

到IP地址为192.168.1.33的触摸屏上,从而实现了通过Internet对触摸屏的控制。以域

名方式访问触摸屏的画面如下:

图9 以域名方式访问触摸屏

客户端远程控制时,对于画面中的输入域,需要使用鼠标和键盘作为输入:

图10 输入域的操作

2.2.4 其它问题

实 行远程控制的计算机上必须安装 JAVA 运行环境:

jre-1_5_0_06-windows-i586-p。该软件包含在 MOVICON的安装 CD中,目录为:Java

2 Runtime Environment 。也可以从网站上免费下载最新版本。

除了微软的IE浏览器外,也可以使用Linux,Unix工作站,或其它 任何具有Java功能的

平台。

3 结束语

本远程控制系统在机器上投入使用以来,为客户工厂解决工艺问题起到了很大的作用,

以前需要派调 试人员前往客户工厂才能解决的工艺问题,现在只需要客户方将机器接入

Internet,我公司的调试人员在计算机前就能完成工艺参数的调试,从而节省了时 间和开

支。客户工厂内的技术人员也可使用该功能,随时随地处理异常。


发布者:admin,转转请注明出处:http://www.yc00.com/news/1718698015a2751921.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信