• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

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

      摘要:利用java實現(xiàn)文檔在網(wǎng)絡(luò)中從客戶端到服務(wù)器端的傳輸??蛻舳丝梢詫⒅付愋偷奈募吧蟼鲿r間,實現(xiàn)特定文件定時自動上傳的功能。該設(shè)計與實現(xiàn)建立在中石油加管系統(tǒng)之上,實現(xiàn)加管系統(tǒng)當(dāng)日數(shù)據(jù)的快速獲取與備份,并且該輔助系統(tǒng)已在定點試用中。

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

      中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號: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

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

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

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

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

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

      2 socket簡述

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

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

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

      圖3 客戶端運行過程圖

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

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

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

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

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

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

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

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

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

      3.2 實現(xiàn)客戶端程序開機啟動

      要實現(xiàn)開機自動啟動程序,需要借助一個工具:JavaService-2.0.10。該工具作為將java程序注冊成為windos系統(tǒng)自啟服務(wù)的一種,使用起來非常方便,只需要將java程序打包成xxx.jar格式的包,然后放在JavaService-2.0.10的classes目錄下,然后運行如下在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"

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

      3.3 文件自動上傳實現(xiàn)

      文件自動上傳的實現(xiàn),用到了java自帶的timer類,并且是兩個定時器進行嵌套,彼此共享一個信號變量。首先是在指定時間,觸發(fā)定時器,執(zhí)行文件查找任務(wù),然而此時不一定會有需要上傳的文件存在,所有,在同時還會啟動另一個定時器,該定時器的目的就是在一個周期較短的時間內(nèi)做文件查找操作,直到找到可以上傳的文件,才結(jié)束文件查找操作,并且改變信號變量的值,使得外部定時器任務(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ù)器端實現(xiàn)

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

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

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

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

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

      // 訪問Socket 對象的getInputStream 方法取得客戶端發(fā)送過來的數(shù)據(jù)流

      din.readUTF();

      // 獲取文件名

      String fileName = din.readUTF();

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

      filePath += "\\";

      }

      filePath += fileName;

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

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

      // 開始接收文件

      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é)束語

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

      參考文獻:

      [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.

      华宁县| 昌平区| 昌宁县| 蒙山县| 察哈| 宜君县| 云霄县| 柘荣县| 昭通市| 和顺县| 湖南省| 辛集市| 奉新县| 江川县| 顺昌县| 阳东县| 琼结县| 米林县| 宝坻区| 大埔县| 榆中县| 高雄县| 财经| 富蕴县| 迭部县| 彝良县| 扎兰屯市| 集贤县| 永新县| 福建省| 金坛市| 江都市| 乐清市| 神池县| 津南区| 扎兰屯市| 于都县| 阿巴嘎旗| 桐乡市| 通河县| 黔东|