国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

加油站資金庫(kù)存管理輔助系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

2016-01-05 12:43:12諶連龍何先波李小松
電腦知識(shí)與技術(shù) 2015年29期

諶連龍++何先波++李小松

摘要:利用java實(shí)現(xiàn)文檔在網(wǎng)絡(luò)中從客戶端到服務(wù)器端的傳輸。客戶端可以將指定類(lèi)型的文件及上傳時(shí)間,實(shí)現(xiàn)特定文件定時(shí)自動(dòng)上傳的功能。該設(shè)計(jì)與實(shí)現(xiàn)建立在中石油加管系統(tǒng)之上,實(shí)現(xiàn)加管系統(tǒng)當(dāng)日數(shù)據(jù)的快速獲取與備份,并且該輔助系統(tǒng)已在定點(diǎn)試用中。

關(guān)鍵詞:socket;自啟服務(wù);定時(shí)上傳

中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)29-0051-03

Gas Station Capital Inventory Management Auxiliary System Design and Implementation

CHEN Lian-long, HE Xian-bo, LI Xiao-song

(Computer School of China West Normal University, Nanchong 637000, China)

Abstract:This article focuses on the use of Java implementation document from the client to the server in the network transmission. The client can specify the type of the file and upload time, realize the function of specific files regularly upload automatically。The design and implementation based on oil and pipe system,implementation with quick access to the data pipe system and backup, and the auxiliary system has been already used in somewhere.

Key words: socket; automatic startup service; time to upload

隨著計(jì)算機(jī)應(yīng)用的不斷發(fā)展,客戶對(duì)于應(yīng)用程序能否滿足其功能需求更加的看重。中國(guó)石油公司拉薩地區(qū)分管負(fù)責(zé)人不滿足于加油站管理系統(tǒng)原有功能,意在其基礎(chǔ)上增加一種較實(shí)時(shí)的數(shù)據(jù)監(jiān)測(cè)功能,從而更好了解各加油站點(diǎn)燃料及其他產(chǎn)品的每日銷(xiāo)售狀況,且通過(guò)對(duì)數(shù)據(jù)分析得到結(jié)果,與加管系統(tǒng)中數(shù)據(jù)進(jìn)行對(duì)比,比較實(shí)際銷(xiāo)售金額與應(yīng)產(chǎn)生的銷(xiāo)售金額,避免因某些因素造成的資金缺失,起到一種監(jiān)督的作用。

為了滿足客戶這一功能需求,提出了基于B/S模式的加油站資金庫(kù)存管理輔助系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。該輔助系統(tǒng)由兩部分組成:供瀏覽器訪問(wèn)的服務(wù)器平臺(tái)與放置在各個(gè)站點(diǎn)獲取原始數(shù)據(jù)的客戶端。

本文主要介紹獲取原始數(shù)據(jù)的客戶端、服務(wù)器端設(shè)計(jì)與實(shí)現(xiàn),采用java編程語(yǔ)言,使用socket進(jìn)行數(shù)據(jù)通訊,socket提供了基于TCP/IP網(wǎng)絡(luò)協(xié)議的接口,采用客戶機(jī)和服務(wù)器通信機(jī)制,可靠且速度快。

1 系統(tǒng)功能簡(jiǎn)介

該系統(tǒng)由幾個(gè)部分組成:放置在各個(gè)站點(diǎn)的加管系統(tǒng)和站點(diǎn)自啟服務(wù)程序、放置在服務(wù)器端的自啟服務(wù)程序、數(shù)據(jù)庫(kù)、j2ee平臺(tái)網(wǎng)站式管理平臺(tái)。當(dāng)加管系統(tǒng)生成當(dāng)天的銷(xiāo)售情況、燃料罐數(shù)據(jù)等文檔時(shí),在客戶端的自啟服務(wù)就會(huì)將這些文檔上傳到服務(wù)器端,服務(wù)器端的自啟程序就會(huì)在接收到這些文檔的同時(shí),解析數(shù)據(jù)并保存到服務(wù)器數(shù)據(jù)庫(kù)中。站點(diǎn)人員通過(guò)瀏覽器即可在班結(jié)時(shí)通過(guò)手動(dòng)輸入金額與服務(wù)器端數(shù)據(jù)進(jìn)行比較,避免站點(diǎn)應(yīng)收金額與實(shí)際金額不匹配的情況出現(xiàn)。系統(tǒng)結(jié)構(gòu)如圖1所示。

2 socket簡(jiǎn)述

Socket,又被稱為套接字,是由IP地址和端口號(hào)組合而成。用于實(shí)現(xiàn)網(wǎng)絡(luò)上客戶端和服務(wù)器之間的連接和數(shù)據(jù)通信。其通訊過(guò)程大致是:服務(wù)器端首先啟動(dòng)成功,并且處于接收狀態(tài)監(jiān)聽(tīng)中,客戶端寫(xiě)好socket,包含IP和端口號(hào),然后向服務(wù)器端發(fā)送請(qǐng)求,服務(wù)器接收并處理請(qǐng)求后,將結(jié)果socket返回給客戶端。套接字通訊一般用于網(wǎng)絡(luò)底層,無(wú)論是基于TCP/IP的可靠傳輸,還是基于UDP的不可靠傳輸,都可以使用Socket套接字來(lái)實(shí)現(xiàn)通信。Socket通信過(guò)程如圖2所示。

3 客戶端的實(shí)現(xiàn)

客戶端主要是用來(lái)完文件的自動(dòng)上傳,附帶了其他參數(shù)設(shè)置,包括指定文件上傳時(shí)間、文件所在目錄、服務(wù)器端端口和IP等。在各站點(diǎn)主機(jī)上只需要進(jìn)行一次參數(shù)配置,之后便可以使用客戶端自啟程序,完成定時(shí)自動(dòng)上傳指定文件。整個(gè)客戶端運(yùn)行過(guò)程如圖3。

圖3 客戶端運(yùn)行過(guò)程圖

3.1 參數(shù)設(shè)置

實(shí)現(xiàn)參數(shù)設(shè)置功能的是2個(gè)桌面程序,運(yùn)行這2個(gè)程序時(shí)的界面如圖4。在界面上可以看到“基本參數(shù)”、“服務(wù)器參數(shù)”、“站點(diǎn)參數(shù)”等項(xiàng)。文件類(lèi)型指的是需要上傳的文件名前綴;文件目錄即需要上傳文件的存放目錄,在這里指定目錄,方面程序自動(dòng)上傳時(shí)直接到該目錄進(jìn)行查找;上傳時(shí)間即為給定一個(gè)時(shí)間,定時(shí)執(zhí)行任務(wù);端口號(hào)是指服務(wù)器端允許客戶端訪問(wèn)的一個(gè)端口號(hào),與服務(wù)器端端口號(hào)對(duì)應(yīng)即可;ip地址就是服務(wù)器端所使用的公網(wǎng)IP地址;站點(diǎn)名指的是當(dāng)前站點(diǎn)的名稱;站點(diǎn)編號(hào)項(xiàng)指的是管理中心對(duì)其進(jìn)行的編號(hào)。

通過(guò)界面上的操作,將填好的數(shù)據(jù)保存到pc機(jī)的注冊(cè)表中,關(guān)鍵代碼如下:

Preferences pre=Preferences.systemRoot().node("/baseinfo");

以上代碼會(huì)在注冊(cè)表的HKEY_LOCAL_MACHINE/Software/JavaSoft/prefs中生成一個(gè)名為baseinfo的表,保存的是一個(gè)鍵值對(duì)數(shù)據(jù)。

將數(shù)據(jù)寫(xiě)入注冊(cè)表的代碼:

pre.put("關(guān)鍵字", 值);

從注冊(cè)表讀數(shù)據(jù)代碼:

pre.get("關(guān)鍵字", "缺省值");

3.2 實(shí)現(xiàn)客戶端程序開(kāi)機(jī)啟動(dòng)

要實(shí)現(xiàn)開(kāi)機(jī)自動(dòng)啟動(dòng)程序,需要借助一個(gè)工具:JavaService-2.0.10。該工具作為將java程序注冊(cè)成為windos系統(tǒng)自啟服務(wù)的一種,使用起來(lái)非常方便,只需要將java程序打包成xxx.jar格式的包,然后放在JavaService-2.0.10的classes目錄下,然后運(yùn)行如下在dos界面下輸入如下代碼:

JavaService-2.0.10\JavaService.exe-installrunclient%cd%/Java/jdk1.6.0_16/jre/bin/server/jvm.dll-Djava.class.path=%cd%/Java/jdk1.6.0_16/lib/tools.jar;%cd%/JavaService-2.0.10/classes/dom4j-1.6.1.jar;%cd%/JavaService-2.0.10/classes/client.jar -start main.Main -out "%cd%/out.log" -err "%cd%/err.log"

然后界面就會(huì)顯示服務(wù)裝配成功,接著在輸入net start runclient,當(dāng)服務(wù)啟動(dòng)成功時(shí),說(shuō)明該服務(wù)部署成為系統(tǒng)自啟服務(wù)。

3.3 文件自動(dòng)上傳實(shí)現(xiàn)

文件自動(dòng)上傳的實(shí)現(xiàn),用到了java自帶的timer類(lèi),并且是兩個(gè)定時(shí)器進(jìn)行嵌套,彼此共享一個(gè)信號(hào)變量。首先是在指定時(shí)間,觸發(fā)定時(shí)器,執(zhí)行文件查找任務(wù),然而此時(shí)不一定會(huì)有需要上傳的文件存在,所有,在同時(shí)還會(huì)啟動(dòng)另一個(gè)定時(shí)器,該定時(shí)器的目的就是在一個(gè)周期較短的時(shí)間內(nèi)做文件查找操作,直到找到可以上傳的文件,才結(jié)束文件查找操作,并且改變信號(hào)變量的值,使得外部定時(shí)器任務(wù)得以執(zhí)行,完成文件上傳。關(guān)鍵代碼如下:

if (commontUtil.getDir() != null&& commontUtil.getSiteSetName() != null) {

fileName = commontUtil.getDir()+"\\"+commontUtil.getSiteSetName() + ".xml";

// 檢查配置文件是否存在

file = new File(fileName);

if (!file.exists()) {

MainGui gui = new MainGui();

gui.initview();

} else {

try {

String[] prefix = commontUtil.getprefix();

for (int i = 0; i < prefix.length; i++) {

String filePath = SearchFile.getFilePath(prefix[i]);

if (filePath != null) {

File fi_ = new File(filePath);

if (fi_.exists()) {

MyTask.flag = true;

// 文件存在,就立馬上傳

new FtpClient2().startUpload(prefix[i],commontUtil.getPort(), commontUtil.getIP());}}

else {

}}} catch (ParseException e) {

e.printStackTrace();

} catch (UnsupportedEncodingException e) {e.printStackTrace();

} finally {

try {

if (MyTask.flag) {

new FtpClient2().startUpload_siteset(commontUtil.getPort(), commontUtil.getIP());

this.cancel();

MyTask.flag = false;

}} catch (ParseException e) {

e.printStackTrace();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}}}}

4 服務(wù)器端實(shí)現(xiàn)

服務(wù)器端包括接收文檔的自啟程序和數(shù)據(jù)庫(kù)、供網(wǎng)頁(yè)訪問(wèn)的網(wǎng)站式平臺(tái)。在這里主要介紹接收文檔的自啟程序的實(shí)現(xiàn)。該程序主要目的就是將站點(diǎn)客戶端上傳的文檔存放到指定目錄文件夾中,當(dāng)在網(wǎng)頁(yè)中觸發(fā)訪問(wèn)事件后,解析文檔,將文檔中的數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中,并且顯示到頁(yè)面上。

接收文件的關(guān)鍵代碼如下:

dout = new DataOutputStream(socket.getOutputStream());

din = new DataInputStream(socket.getInputStream());

dout.writeUTF("服務(wù)器地址:" + socket.getLocalAddress());

// 訪問(wèn)Socket 對(duì)象的getInputStream 方法取得客戶端發(fā)送過(guò)來(lái)的數(shù)據(jù)流

din.readUTF();

// 獲取文件名

String fileName = din.readUTF();

if (filePath.endsWith("/") == false&& filePath.endsWith("\\") == false) {

filePath += "\\";

}

filePath += fileName;

if (filePath != null) {din.readLong();

// 從客戶端上傳到服務(wù)器

// 開(kāi)始接收文件

writer = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(new File(filePath))));

dout = new DataOutputStream(socket.getOutputStream());

int bufferSize = 10240;// 10k

byte[] buf = new byte[bufferSize];

int read = 0;

while ((read = din.read(buf)) != -1) {

writer.write(buf, 0, read);}

writer.flush();

5 結(jié)束語(yǔ)

本文主要介紹了運(yùn)用java自帶的socket編程實(shí)現(xiàn)網(wǎng)絡(luò)中文件傳輸,并且用到j(luò)ava.util.Timer和java.util.TimerTask實(shí)現(xiàn)周期性的定時(shí)上傳功能。該輔助系統(tǒng)實(shí)現(xiàn)了當(dāng)加管系統(tǒng)生成指定文檔后及時(shí)將文檔傳到服務(wù)器端的功能,通過(guò)網(wǎng)頁(yè)訪問(wèn)上傳到服務(wù)器端的數(shù)據(jù)。該系統(tǒng)作為一個(gè)輔助功能存在,已在中國(guó)石油天然氣集團(tuán)公司西藏拉薩地區(qū)試用中,具有一定的使用價(jià)值。

參考文獻(xiàn):

[1] 李剛. 瘋狂java 講義[M]. 2版.北京: 電子工業(yè)出版社, 2012.

[2] java socket編程[EB/OL]. http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html.

[3] 習(xí)燕菲. 基于Socket的網(wǎng)絡(luò)文件傳輸[J]. 信息與電腦:理論版, 2015(8): 52-54.

磴口县| 桂林市| 依安县| 上林县| 漯河市| 东台市| 甘德县| 连平县| 杭锦后旗| 保定市| 博白县| 大安市| 竹溪县| 双柏县| 太原市| 上虞市| 揭阳市| 陆川县| 中山市| 邵阳市| 阳新县| 偃师市| 沾化县| 沂水县| 大渡口区| 澄城县| 威信县| 微山县| 南皮县| 民乐县| 陈巴尔虎旗| 海盐县| 德格县| 寻乌县| 泾源县| 凤凰县| 莎车县| 金湖县| 通化市| 德惠市| 陵水|