• 沒有找到結果。

以JAVA程式語言為基礎開發適用於數位全像顯微鏡系統之網路服務

N/A
N/A
Protected

Academic year: 2021

Share "以JAVA程式語言為基礎開發適用於數位全像顯微鏡系統之網路服務"

Copied!
76
0
0

加載中.... (立即查看全文)

全文

(1)國立臺灣師範大學 資訊工程研究所碩士論文 指導教授:黃 文 吉 博士 以 JAVA 程式語言為基礎開發適用於數位全像顯 微鏡系統之網路服務 Web Service Implementation for Digital Holographic Microscopy System Based on JAVA. 研究生:董 任 軒. 中華民國. 一 零 二 年. 撰. 七. 月.

(2) 摘要. 摘要. 以 JAVA 程式語言為基礎開發適用於數位全像顯微鏡系統之網路服務 董任軒 本論文探討如何利用 JAVA 程式語言,針對數位全像顯微鏡系統(DHM, Digital Holographic Microscopy),開發出一個網路服務,並設計使用者介面,供給 非資訊工程相關科系的研究者也能容易進行設定和操作。 一般數位全像顯微鏡系統的實驗,必須經由收集樣本、保存在低溫環境中、 運送回實驗室主機分析等數個階段,整個過程耗時費力,若是在戶外進行觀察, 運送途中更容易因溫度和路程,使樣本受到破壞,造成誤差。而且根據文獻[1], 未來的數位全像顯微鏡系統將趨向於可攜式,所以若是能利用 JAVA 程式語言跨 平台的特性,整合實驗室主機和可攜式數位全像顯微鏡裝置,開發出網路服務, 透過連結網路,就可以即時獲得檢測資訊。. 關鍵字:JAVA、DHM、網路服務、使用者介面. i.

(3) 致謝. 致謝. 非常感謝我的指導教授 黃文吉教授,在這兩年間對我不辭辛勞的指導,讓 我無論是在專業上或是待人處事上都獲益良多,在此獻上最誠摯的謝意。這段學 習的時間有很多的成長和體驗,想必會在人生的旅途上留下一段深刻又美好的回 憶,老師非常感謝您。 此外,我也要感謝相處兩年的同學瀚逸、建廷、清志、國璿、聖穎等,和學 弟妹們奇恩、思淮、皓棠、烝祺、一修、光耀、雅姿、煥元等的幫忙和協助。 很榮幸能來到國立臺灣師範大學,並在 MC2 實驗室認識大家,和大家一起學 習和成長。最後,還要感謝我的家人,因為有你們的支持和鼓勵,讓我可以無後 顧之憂在我的研究上。謝謝你們,在此將論文獻給我最親愛的你們. ii.

(4) 目錄. 目錄 摘要.............................................................................................................................................. i 致謝..............................................................................................................................................ii 附圖目錄......................................................................................................................................v 附表目錄.................................................................................................................................... vii 第一章. 緒論 ........................................................................................................................... 1. 1.1. 研究背景與動機 ....................................................................................................... 1. 1.2. 研究目的及方法 ....................................................................................................... 3. 1.3 全文架構.......................................................................................................................... 4 第二章 基礎背景介紹............................................................................................................... 6 2.1 簡介.................................................................................................................................. 6 2.1.1 JAVA 優點 ............................................................................................................. 6 2.1.2 JAVA 程式語言與 C++程式語言的比較 ............................................................. 7 2.1.3 JAVA 在網際網路程式開發上的優點.................................................................. 9 2.2 JAVA 網際網路傳輸之基本技術............................................................................... 10 2.2.1 基本傳輸概念 ......................................................................................................... 10 2.2.2 Server 端程式: ...................................................................................................... 13 2.2.3 Client 端程式: ....................................................................................................... 16 2.3 實際程式........................................................................................................................ 20 2.4 基本成果說明及討論 .................................................................................................... 28 2.5 Android 平台介紹 ......................................................................................................... 33 2.5.1 Android 系統的優點: .......................................................................................... 33 2.5.2 Android 平台架構: .............................................................................................. 35 第三章. 開發環境及系統功能介紹 ..................................................................................... 38. 3.1 開發環境介紹................................................................................................................ 38 iii.

(5) 目錄. 3.2 系統功能說明................................................................................................................ 39 3.3 系統架構........................................................................................................................ 41 3.4 系統運作流程圖............................................................................................................ 42 第四章 系統操作說明............................................................................................................. 47 4.1 桌上型電腦和筆記型電腦的圖形化介面介紹 ............................................................ 47 4.2 行動裝置的圖形化介面介紹 ......................................................................................... 54 第五章 結論............................................................................................................................. 59 參考著作................................................................................................................................... 60 附錄:Server 端的運作模式 ................................................................................................... 62. iv.

(6) 附圖目錄. 附圖目錄 圖 1.1 完整系統架構圖............................................................................................................. 4 圖 2.1 基本一對一的網路傳輸系統 ..................................................................................... 10 圖 2.2 Server 端流程圖 ......................................................................................................... 11 圖 2.3 Client 端的流程圖 ......................................................................................................... 12 圖 2.4 鍵入”javac [程式名稱].java” ........................................................................................ 28 圖 2.5 鍵入”java [程式名稱] [outfilename][outfilename2]” .................................................. 28 圖 2.6 顯示”server created” 和”waiting for client to connect” ........................................... 29 圖 2.7 ”javac [程式名稱].java” .............................................................................................. 29. 圖 2.8 鍵入 java [程式名稱] [Server 端 IP 地址][infilename][infilename2]…………30 圖 2.9 顯示”connect from client 140.122.184.183” ............................................................... 30 圖 2.10 顯示”Data from internet sent to file successfully.”.................................................... 30 圖 2.11 顯示”BMP/TXT Data sent to internet successfully” ................................................... 31 圖 2.12 等待 Server 端回傳資料 ............................................................................................. 31 圖 2.13. Server 端準備將資料回傳給 Client 端 .................................................................... 31. 圖 2.14 顯示”BMP. data sent to internet successfully.” ....................................................... 32. 圖 2.15 顯示”BMP data has accepted from server successfully.”........................................... 32 圖 2.16 Android 圖案................................................................................................................ 33 圖 2.17. Android 平台架構.................................................................................................... 36. 圖 3.1 系統架構圖................................................................................................................... 41 圖 3.2 各種裝置....................................................................................................................... 42 圖 3.3 獲得要傳送的資料....................................................................................................... 42 圖 3.4 使用使用者介面........................................................................................................... 43 圖 3.5 連結到網路................................................................................................................... 44 圖 3.6 Server 端收到資料後進行計算,將結果回傳 ......................................................... 45 圖 3.7 將結果回傳到 Client 端 ............................................................................................... 46 圖 3.8 回傳的結果................................................................................................................... 46 v.

(7) 附圖目錄. 圖 4.1 桌上型電腦和筆記型電腦的圖形化介面 ................................................................... 47 圖 4.2 Calculation Parameter 部分........................................................................................... 48. vi.

(8) 附表目錄. 附表目錄 表 2.1 JAVA 程式語言與 C++程式語言的比較 ...................................................................... 8. vii.

(9) 第一章 緒論. 第一章. 緒論. 在本章中,我們將說明本論文研究背景與動機,並簡單介紹本論文研究方法 與目的,最後介紹本論文各章節之架構。 1.1 研究背景與動機 全像術是一種在平面上製造立體圖像的技術,又稱為三次元立體影像之再生 技術,可看到物體呈現真實般的三維立體影像。近幾年全像技術大躍進,時常被 應用於許多方面,例如多媒體、視訊電話以及實驗室的研究計畫。數位全像顯微 鏡系統(Digital Holographic Microscopy,DHM)即是應用全像技術的顯微鏡系統, 利用全像拍攝技術,將拍攝到的全像片,進行相位展開運算,得到三維立體影像, 讓研究人員可以更加清楚的觀察拍攝到的樣本,和一般的顯微鏡系統相比,不僅 可以量測細微的樣本,還可以針對它的三維影像量測出相位改變,提高顯微鏡的 解析度,獲得更精確的資訊,進行更進一步的研究。但無論是一般的顯微鏡系統 或是數位全像顯微鏡系統,體積皆太過於龐大,通常都設置在實驗室中,所以使 用上受到地域性的限制,而且觀察樣本若是受到運送時間和溫度的影響,或許會 產生誤差,造成實驗結果的錯誤。故有一部分的研究人員開始研究開發,將整個 顯微鏡系統的體積縮小,以便攜帶於戶外進行觀察,甚至還可以將顯微鏡系統和 行動裝置連結在一起[4][5],把獲得的資料存在手機中,或者利用手機內建的程式 [6],進行簡單的實驗和檢測。另外還有其它的研究人員直接將數位全像顯微鏡系 統縮小,將數位全像顯微鏡從實驗室帶去室外[1],不僅獲得的全像片更加多元,. 1.

(10) 第一章 緒論. 更可將數位全像顯微鏡技術應用於醫療、生物科技,例如用來觀察偏遠地區的水 質,以及體液和血液的量測[2][3],整個顯微鏡系統開始擁有可攜性和方便性。按 照目前的趨勢,未來可能有更多的可攜式數位全像顯微鏡系統被開發出來,所以 是否能夠為這些裝置提供一個網路平台[7],開發出網路服務,給戶外的研究人員 連結網路後,即時回傳觀察到的樣本,並即時收到分析後的結果,根據這些結果, 作出正確精準的判斷。 自從網際網路發展至今,已經開發出許多殺手級的網路服務,例如像是電子 郵件、關鍵字搜尋和網路電話等等。而且近幾年由於 Wi-Fi 網路、3G 行動上網的 普及率上升,即使出門在外也可以享受網際網路所帶來的便利,上網不再侷限在 固定場所,網路的載具也從桌上型電腦和筆記型電腦,擴及到智慧型手機及平板 電腦,無線網路及行動網路的使用率急速攀升,由智慧型裝置所發展出來的 APP(Application)應用程式商店,也產生出大量的網路服務。故本論文欲開發一個 網路服務,供給研究人員隨時隨地皆可使用行動裝置,透過網路傳送資料給遠端 的主機,並只需等候數分後即可獲得結果,若是用於偏遠醫療檢測或生物觀察, 整個實驗過程將更加快速即時。不過由於裝置的種類繁多,整合方面會遭遇到程 式碼重新開發或是相容性的問題,所以在這邊本論文選擇 JAVA 程式語言來進行 開發。 JAVA 程式語言因為擁有 JVM(Java Virtual Machine)技術[10],可在不同作業 系統平台上建立起自己的虛擬機,在執行程式上不會發生相容性的問題,故擁有 2.

(11) 第一章 緒論. 跨平台特性,可以整合許多裝置,無論是實驗室中的電腦還是行動裝置,皆可相 互溝通,而且也不會因為移植到其它裝置而需要重新設計程式,大大減少整個開 發流程的時間。另外,JAVA 程式語言提供許多類型的函式庫給開發人員使用, 包含用於開發網路服務的網路傳輸函式庫[9],透過提供的函式庫,可開發出網際 網路的傳輸程式,讓使用者可經由網路,和遠端的主機相互溝通。. 1.2 研究目的及方法 基於上節所述,本論文的目的,在於利用 JAVA 程式語言跨平台的特性, 整合所有可攜式數位全像顯微鏡裝置以及其它行動裝置,並開發出網路服務, 研究人員透過網路,可即時獲得檢測資訊,而且不會因為樣本在運送過程中 產生誤差。 本論文預定開發的系統架構如圖 1.1,首先必須利用 JAVA 程式語言, 分別開發 Client 端和 Server 端的程式,Client 端的部分,以桌上型電腦、筆 記型電腦和智慧型裝置平板電腦作為開發對象[8],撰寫網際網路傳輸程式, 但考量到使用者大部分是非資訊工程背景的原因,本系統提供使用者介面, 讓使用者可透過簡單的操作模式,完成整個實驗過程;Server 端的部分,以 實驗室電腦作為開發對象,撰寫網際網路傳輸程式,Server 端的程式不僅要 和 Client 端連結,還必須和其它運算軟體如 Matlab,以檔案共享的方式,使 其相互溝通,自動將未經運算的檔案進行計算,並將計算後的結果,回傳給 Client 端。 3.

(12) 第一章 緒論. 圖 1.1 完整系統架構圖. 1.3 全文架構. 本論文共分為五章,以下分別為各章的標題及內容概述: 【第一章】緒論 本章主要說明本論文的研究背景和動機,並對本論文的研究方法和目的 做概觀的簡介。 【第二章】基礎背景介紹 本章將介紹如何利用 JAVA 程式語言開發基本的網際網路傳輸程式,並 介紹 Android 行動作業系統的相關事宜。 【第三章】開發環境及系統功能介紹 本章將介紹整個系統的開發環境,以及所有系統的功能介紹,還有如何 使用本系統的運作流程。 4.

(13) 第一章 緒論. 【第四章】操作說明 本章將介紹整個系統細節的操作說明,包含如何操作使用者介面,以及 可獲得的結果。 【第五章】結論 本章將對本論文做出總結,提出本系統主要解決了哪些相關問題,還有 本系統架構有哪些優點。. 5.

(14) 第二章 基礎背景介紹. 第二章 基礎背景介紹. 本章節將要介紹如何利用JAVA程式語言,開發出基本圖片傳輸系統。藉由 兩台獨立的電腦,視為Server端及Client端,分別開發出Server端和Client端的程式, 實現Client端傳送圖片給Server端的功能。我們會就四小節來討論,首先第一節我 們會討論為何使用JAVA程式語言來開發此系統,第二節解釋基本圖片傳輸系統 的基本概念,第三節實作出基本的圖片傳輸程式,第四節則就結果來做討論以及 分析。方便讀者對本論文有初步的了解與認識。. 2.1 簡介. 本小節我們要討論的是,為何要使用JAVA程式語言來開發基本圖片傳 輸系統,而不是使用其他程式語言,使用JAVA到底有什麼優點,以下就是 JAVA程式語言所擁有的優點介紹:. 2.1.1 JAVA 優點. 若是要實現基本的圖片傳輸程式,必須要使用網際網路的傳輸,我們必 須挑選較容易開發的程式語言,在這裡我們採用JAVA程式語言來做為開發 系統的工具,以下JAVA具有下列的優點: 跨平台: 由於JAVA的JVM(Java Virtual Machine)技術,可在各種作業系統上建立 6.

(15) 第二章 基礎背景介紹. 起自己的平台,故擁有跨平台的特色。若是未來將此系統移植到其他平台如 平板或手機上,皆只要設計使用者介面,毋須重新設計程式。 簡單: JAVA本身提供許多類別函式庫給開發者使用,可用來開發許多的應用 程式,包含網際網路的程式開發,而且物件導向的設計,使得程式維護相對 比較容易。 資源回收處理(Garbage Collection) : 剛剛提到JAVA中的JVM技術,不僅可達到跨平台的功能,還可以幫助 開發者做程式的記憶體動態管理,讓開發者可以專心於程式開發,而不用擔 心記憶體的問題。 例外處理(Exception) : JAVA的例外處理機制,可顯示程式中有可能出現問題的地方,提醒開 發者相關事宜,若是執行中發生錯誤時,開發者可以就顯示的訊息中,發現 問題點,有助於開發者撰寫程式。. JAVA 程式語言與 C++程式語言的比較. 2.1.2. JAVA程式語言物件導向的特性,在撰寫程式的時候較為容易,而同樣擁有 物件導向特性的另一個程式語言C++,兩者之間有何不同,為何要使用JAVA程式 語言而非C++程式語言。以下表2.1 即是兩者之間的比較。. 7.

(16) 第二章 基礎背景介紹. JAVA程式語言 跨平台特性. C++程式語言. 有。程式的可移植性高, 無。程式的可移植性低,. Pointer 功能. 未來可以將程式放到其. 若是未來想要將程式放. 他作業系統的平台上執. 到其他作業系統,則還需. 行。. 要重新撰寫。. 無。取而代之的資源回收 有。此為C++程式語言的 處理(Garbage Collection). 特色,C++開發者常使用. 的功能,採用動態記憶體 Pointer功能開發出強大 配置,讓開發者可以不用 的程式,但也因為必須涉 擔心有關於記憶體配置. 及到記憶體管理,所以常. 的問題。. 常會在這裡發生錯誤,讓 開發者較為頭痛。. 函式的功能. 無。利用物件中的方法來 有。 取代函式,物件本身才是 真正的主體,內部所包含 的方法,必須放在物件裡 面才有意義,增加物件導 向的特性。 表2.1. JAVA程式語言與C++程式語言的比較 8.

(17) 第二章 基礎背景介紹. 2.1.3. JAVA 在網際網路程式開發上的優點. JAVA程式語言提供的許多類別函式庫,可讓開發者針對自己想要設計的程式 加以運用。尤其是網際網路方面的功能,JAVA提供許多有關於網際網路的程式 函式庫供開發者使用,我們時常使用 java.net.* 這個函式庫來開發有關於網際網 路的程式,包含許多類別。其中InetAddress類別常用於獲得網址的各類資訊,而 內部常用的getHostName()及getHostAdress()這兩個方法,分別就能獲得有關於本 機的名稱和位址;另外還有ServerSocket類別,可以它用來開發Server端的伺服器 平台,利用ServerSocket類別的建構函式 ServerSocket(int port),來實作出完整的 伺服器,並且使用accept()方法,即可完成伺服器傾聽的功能;再來則是JAVA程 式語言中,用來開發網際網路程式最為重要的Socket 類別,由於TCP/IP底層的運 作甚為複雜,有許多諸如處理封包、交握等細節,所以JAVA將其直接簡化,只 需要Socket 類別的建構函式 public Socket(InetAddress host, int port),利用連接埠 串起Server端及Client端,將其檔案以資訊串流的方式作傳遞。如此一來,就不用 擔心TCP/IP底層複雜的運作。. 9.

(18) 第二章 基礎背景介紹. 2.2. JAVA 網際網路傳輸之基本技術. 透過JAVA程式語言提供的網際網路的函式庫,可以實現網路傳輸的功能, 那接下來我們就先介紹基本一對一傳輸概念,再來逐一實現。. 2.2.1 基本傳輸概念. 若是想要設計出一個基本一對一的網路傳輸系統,首先需要準備兩台電腦, 分別為Server端及Client端如圖2.1。Client端發送要求建立連線的訊息給Server 端,Server端收到後回傳建立連線的訊息給Client端,Client端接收後即開始傳 送資料。. Client 端. Server 端 請求連線 建立連線 傳送資料 回傳資料. 圖 2.1. 基本一對一的網路傳輸系統. 若要實現Server端及Client端一對一的網路傳輸,必須分別在兩邊撰寫程式, 圖2.2是Server端的流程圖。開啟Server端的程式後,會持續偵測有無Client端的連 10.

(19) 第二章 基礎背景介紹. 線,若是有Client端要求建立連線,則回應並建立連線,此時Client端即可傳送資 料給Server端,收到資料後,Server端則會回傳資料給Client端,Client端收到回傳 資料後即完成傳輸,而Server端的狀態回到持續偵測有無其它Client端的連線。 Server端流程圖: 初始狀態. NO. 是否有 Client 端連線. YES 回覆 Client 端 並建立連線. 接收資料. 回傳資料給 Client 端. 完成傳輸 圖 2.2. Server 端流程圖. 圖2.3 為Client端的流程圖。開啟Client端的程式後,選取欲傳送的資料後, 發出和Server端要求建立連線的訊息,收到Server端回覆且建立連線,即可傳送資 料,傳送資料給Server端後,必須等待和持續偵測有無資料從Server端回傳。 11.

(20) 第二章 基礎背景介紹. Client端流程圖: 初始狀態. 選取要傳送 的資料. 發送要求連線的訊 息至 Server 端. 是否收到 Server 端 的回覆?. NO. YES 傳送資料. 完成傳輸. NO 有無資 料回傳. YES 接受資料. 完成傳輸 圖 2.3 Client 端的流程圖 12.

(21) 第二章 基礎背景介紹. 接下來,我們將實際利用JAVA程式語言來實現基本的一對一網路傳輸,在 這邊必須分別撰寫Server端及Client端的JAVA程式,在撰寫程式之前,我們會先 匯入網路程式設計使用到的Package,分別是 java.net.*以及 java.io.*兩個Package。 java.net.* 內含的類別和介面,常用於開發網路程式的部分,可實現建立網路平台 以及建立網路連線。 java.io.* 內含的類別和介面,則可以用於資料傳遞,實現傳 送資料和接收資料。匯入方式如下面文字方塊所示,這樣就可以使用Package中定 義的許多類別及方法。 Import java.net.*; Import java.io.*;. 2.2.2 Server 端程式:. 首先是Server端程式,使用到 java.net.*中的網路伺服器平台類別 ServerSocket類別,宣告出ServerSocket的物件ss,可在任一台電腦上建立起 Server端,用來等待Client端的連線,ServerSocket()內的port為網路連接埠, 在這邊我們預設為1234接口:. ServerSocket. ss = new ServerSocket(port);. 用Socket 類別宣告出物件socket: Socket socket; 使用ServerSocket類別中方法accept(),用來準備建立與Client端的連線,連線 13.

(22) 第二章 基礎背景介紹. 後產生socket平台:. socket= ss.accept();. 另外可以從socket物件中獲得一些資訊,使用Socket 類別的方法 getInetAddress().getHostAddress(),可將其連接Client端的IP顯示出來,即可獲得 Client端的IP地址:. System.out.println("connected from client "+ socket.getInetAddress().getHostAddress());. 接下來,我們必須打開網路串流,所以使用java.io.* 中的網路輸入串流 DataInputStream類別建立物件instream,並用Socket 類別的方法getInputStream(), 獲得Client端的資料串流,即可打開網路輸入串流,準備從網路上接收資料串流:. instream = new DataInputStream(socket.getInputStream());. 此外,接受到網路輸入串流後,準備在Server端將資料讀出,使用java.io.* 中 的檔案輸出串流FileOutputStream類別,宣告出物件bw,並指定好輸出的檔案名稱, 在這邊是將資料存放在outfilename中,而outfilename的路徑待會執行Server端程式 時才會指定: FileOutputStream bw = new FileOutputStream(outfilename); 使用while迴圈,從網路讀取Client端所傳來的資料,並用DataInputStream類 14.

(23) 第二章 基礎背景介紹. 別的方法readInt(),先讀出一個字元的資料,判斷是否為結尾字元,若是結尾字 元則停止傳輸,代表檔案傳輸完成;若不是則寫入Server端剛剛指定好的檔案名 稱。以此類推,反覆執行直到資料讀出完成:. int messagein; // 設一個變數觀察讀出的字元值 while(messagein!=-1)//當讀到的值不是-1時進入迴圈 { messagein = instream.readInt();//一個字元一個 bw.write(messagein); //讀出資料 }. 從Client端接收資料後,必須再回傳資料給Client端,所以接下來,我們要開 啟欲回傳的檔案,使用File類別,宣告file物件,且使用File建構式,指定好檔案路 徑: File file = new File("C:\\Users\\paulpaul1337\\s\\output1.bmp");. 再來使用Socket類別中的方法Socket.getOutputStream(),打開Server端想要傳 送給Client端的資料。並使用DataOutputStream類別,準備將資料傳送出去:. outstream = new DataOutputStream(socket.getOutputStream());. 接著用FileInputStream類別宣告fis物件,將Server端的資料讀出,準備送入網 15.

(24) 第二章 基礎背景介紹. 路串流傳輸給Client端,而 file物件則是剛剛指定好的檔案路徑:. FileInputStream fis = new FileInputStream(file);. 接下來也是採用while迴圈,從Server端指定的檔案名稱,使用FileInputStream 類別中方法read(),將檔案資料一字元一字元的讀出,判斷是否為結尾字元後,用 DataOutputStream類別中的wrireInt()寫入網路串流中。以此類推,反覆執行直到資 料讀出完成,並且最後使用DataOutputStream類別的方法flush(),徹底將物件 outstream 內的剩餘資料傳送完全:. while((int i = fis.read())!=-1) { outstream.writeInt(i); } outstream.writeInt(i); outstream.flush();. 2.2.3 Client 端程式:. 實作完Server端的程式後,接下來是Client端的部分。和Server端程式不一樣 的地方,在於Client端並不需要使用ServerSocket類別類宣告出網路伺服器平台物 件,只需要使用Socket類別建立物件socket,藉以和Server端溝通: 16.

(25) 第二章 基礎背景介紹. Socket socket;. 使用Socket類別中的方法Socket(InetAddress.getByName(servername),port)。 在這裡的servername則是待會編譯Client端程式才會輸入的Server端IP地址,而port 端為網路連接埠,和Server端一樣為1234接口:. socket = new Socket(InetAddress.getByName(servername),1234);. 再來使用Socket類別中的方法Socket.getOutputStream(),打開Client端想要傳 送給Server端的資料。而且使用java.io.* 中的網路輸出串流DataOutputStream類別, 準備將資料傳送出去: outstream = new DataOutputStream(socket.getOutputStream()); 接著使用java.io.* 中的FileInputStream類別,宣告 fis物件,準備先將Client 端的資料讀出,準備送入網路串流傳輸給 Server端,而 infilename則在執行Client 端程式才會輸入檔案名稱: FileInputStream. fis = new FileInputStream(infilename);. 接下來採用while迴圈,從Client端指定的檔案名稱,使用FileInputStream類別 中方法read(),先讀出一個字元的資料,判斷是否為結尾字元,若是結尾字元則停 止傳輸,代表檔案傳輸完成;若不是則用DataOutputStream類別中的wrireInt(),將 檔案一個字元一個字元寫入網路串流中。以此類推,反覆執行直到資料讀出完成; 17.

(26) 第二章 基礎背景介紹. 另外,執行完while迴圈後,必須執行最後一次的寫入動作,否則會有檔案不完全 的現象發生,並且最後要使用DataOutputStream類別的方法flush(),徹底將物件 outstream 內的剩餘資料傳送完全:. while((int i = fis.read())!=-1) { outstream.writeInt(i); } outstream.writeInt(i); outstream.flush();. Client端傳送資料給Server端後,要持續詢問Server端有無資料回傳,如果沒 有,持續等待並詢問;如果有,則接收資料。所以我們要打開網路串流,使用網 路輸入串流DataInputStream類別建立物件instream,並用Socket 類別的方法 getInputStream(),獲得Client端的資料串流,即可打開網路輸入串流,準備從網路 上接收資料串流: instream = new DataInputStream(socket.getInputStream());. 接受網路輸入串流後,準備在Client端將資料讀出,使用FileOutputStream類 別,宣告出物件fos,且使用FileOutputStream建構式,並指定好輸出的檔案路徑:. FileOutputStream fos = new FileOutputStream("C:\\Users\\output1.bmp");. 18.

(27) 第二章 基礎背景介紹. 使用while迴圈,從網路讀取Server端所傳來的資料,並用DataInputStream類 別的方法readInt(),先讀出一個字元的資料,判斷是否為結尾字元,若是結尾字 元則停止傳輸,代表檔案傳輸完成;若不是則寫入Client端剛剛指定好的檔案名稱。 以此類推,反覆執行直到資料讀出完成:. int message; while(messagein!=-1) { messagein = instream.readInt(); fos.write(messagein); }. 19.

(28) 第二章 基礎背景介紹. 2.3 實際程式. 以下是完整Server端的程式,在這邊Server端將會收到BMP圖檔以及TXT文字 檔,並回傳一個BMP圖檔:. import java.io.*; import java.net.*; import java.util.*; import java.awt.*; import java.lang.*; // 匯入相關套件 public class server19 { static ServerSocket ss; Socket socket; static int port; static String outfilename; static String outfilename2; DataOutputStream outstream; public server19() { try { ss = new ServerSocket(1234);. 20.

(29) 第二章 基礎背景介紹. while(true) // 持續偵測是否有 Client 端連線 { System.out.println("server created"); System.out.println("waiting for client to connect...."); socket= ss.accept(); //回覆 Client 端並建立連線 System.out.println("connected from client "+ socket.getInetAddress().getHostAddress());. instream = new DataInputStream(socket.getInputStream()); // 接收資料 FileOutputStream fos = new FileOutputStream(outfilename);. messagein = 0; messagein2 = 0; while(messagein!=-1) { messagein = instream.readInt(); bw.write(messagein); }. 21.

(30) 第二章 基礎背景介紹. FileOutputStream fos2 = new FileOutputStream(outfilename2); while(messagein2!=-1) { messagein2 = instream.readInt(); fos2.write(messagein2); } System.out.println("Please waiting"); File file = new File("C:\\Users\\paulpaul1337\\s\\output1.bmp"); outstream = new DataOutputStream(socket.getOutputStream()); //準備回傳資料給 Client 端. FileInputStream fis = new FileInputStream(file);. while((i = fis.read())!=-1) { outstream.writeInt(i); } outstream.writeInt(i); outstream.flush(); System.out.println("BMP Data had sent to internet successfully"); // 完成傳輸. 22.

(31) 第二章 基礎背景介紹. public static void main(String[] args) { if(args.length < 2) { System.out.println("Usage:java server19 [XXX.bmp][XXX.txt]"); // 選取要傳送的資料 System.exit(1); } outfilename = args[0]; outfilename2 = args[1]; server19 serverstart = new server19();. } }. 23.

(32) 第二章 基礎背景介紹. 以下是完整Client端的程式,在這邊Client端將會傳送BMP圖檔以及TXT文字檔:. import java.io.*; import java.net.*; import java.util.*; import java.awt.*; import java.lang.*; // 匯入相關套件 public class client19 { int i; Socket socket; static String servername; static int port; static String infilename; static String infilename2; DataOutputStream outstream; public client19() { try {. 24.

(33) 第二章 基礎背景介紹. socket = new Socket(InetAddress.getByName(servername),1234); // 發送要求連線的訊息至Server端 outstream = new DataOutputStream(socket.getOutputStream()); //傳送資料 FileInputStream. fis = new FileInputStream(infilename);. while((i = fis.read())!=-1) { outstream.writeInt(i); } outstream.writeInt(i); outstream.flush(); System.out.println("BMP Data had sent to internet successfully");. while((i = fis2.read())!=-1) { outstream.writeInt(i); } outstream.writeInt(i); outstream.flush(); System.out.println("TXT Data had sent to internet successfully"); } } } // 完成傳輸 25.

(34) 第二章 基礎背景介紹. System.out.println("waiting for server"); instream = new DataInputStream(socket.getInputStream()); // 有無資料回傳 FileOutputStream fos = new FileOutputStream("C:\\Users\\output1.bmp"); //接受資料 while(messagein!=-1) { messagein = instream.readInt(); fos.write(messagein); } System.out.println("BMP data had accepted from server successfully"); } //完成傳輸. 26.

(35) 第二章 基礎背景介紹. public static void main(String[] args) { if(args.length < 3) { System.out.println("USAGE:java client19 [servername][xxx.bmp][xxx.txt]"); System.exit(1); } servername = args[0]; infilename = args[1]; infilename2 = args[2]; client19 clientstart = new client19(); } }. 27.

(36) 第二章 基礎背景介紹. 2.4 基本成果說明及討論. 我們分別編譯兩邊的程式,在這邊為了實驗方便,我們Server端和Client端的 電腦皆是用同一台。 首先是Server端,JAVA的執行方式必須先打開Command Line 模式,見圖2.4, 鍵入”javac [程式名稱].java”,即可編譯整個JAVA程式。. 圖 2.4 鍵入”javac [程式名稱].java”. 編譯完成後,接下來要執行JAVA程式,見圖2.5,鍵入”java [程式名稱] [outfilename][outfilename2]”,程式名稱在這裡是server19 。而outfilename是Server 端收到BMP圖檔後,想要的檔案名稱,這裡我們將其存成input.bmp 檔。 outfilename2則是Server端收到TXT文字檔,將其存成input.txt 檔。. 圖 2.5 鍵入”java [程式名稱] [outfilename][outfilename2]” 28.

(37) 第二章 基礎背景介紹. 執行完後,就會印出圖2.6的訊息,分別是”server created” 和”waiting for client to connect”,等待Client端的連線。. 圖 2.6. 顯示”server created” 和”waiting for client to connect”. Server端程式開啟後,下一步要編譯Client端的程式,打開另一個Command Line 模式作為Client端,見圖2.7,鍵入”javac [程式名稱].java”。. 圖 2.7. ”javac [程式名稱].java”. 編譯完成後,接下來要執行程式,見圖2.8,鍵入java [程式名稱] [Server 端IP地址][infilename][infilename2],程式名稱在這裡是client19 。與Server端不同 的是,執行Client端程式時,必須將Server端IP地址鍵入。而infilename是Client端 要傳送的BMP圖檔名稱,這裡我們要傳的是170.bmp 檔。infilename2是Client端要 29.

(38) 第二章 基礎背景介紹. 傳送的TXT文字檔,傳的是170.txt 檔。. 圖2.8 鍵入java [程式名稱] [Server端IP地址][infilename][infilename2] 見圖2.9,執行Client端程式時,就會發現Server端的地方,顯示”connect from client 140.122.184.183” ,代表建立和Client端 的連線。. 圖 2.9 顯示”connect from client 140.122.184.183”. 見圖2.10,建立連線後,Client端就可以將資料傳送給Server端,傳送完成後, 顯示”Data from internet sent to file successfully.”。. 圖 2.10 顯示”Data from internet sent to file successfully.” 30.

(39) 第二章 基礎背景介紹. 見圖2.11,Client端傳送BMP圖檔和TXT文字檔成功,顯示”BMP/TXT Data sent to internet successfully”。. 圖 2.11 顯示”BMP/TXT Data sent to internet successfully”. 見圖 2.12,Client 端傳送完資料後,等待 Server 端回傳資料。. 圖 2.12 等待 Server 端回傳資料 見圖 2.13,Server 端準備將資料回傳給 Client 端。. 圖 2.13. Server 端準備將資料回傳給 Client 端. 見圖 2.14,Server 端成功將資料回傳給 Client 端,顯示”BMP internet successfully.”。. 31. data sent to.

(40) 第二章 基礎背景介紹. 圖 2.14 顯示”BMP data sent to internet successfully.” 見圖 2.15,Client 端從 Server 端成功收到資料,顯示”BMP data has accepted from server successfully.”。. 圖 2.15 顯示”BMP data has accepted from server successfully.”. 32.

(41) 第二章 基礎背景介紹. 2.5 Android 平台介紹. Android 是一套開放的行動裝置作業系統平台,以 Linux 作業系統為基礎開 發的開放原始碼(Open Source)作業系統。最初為安迪魯賓(Andy Rubin)創辦的公司 研究開發的行動作業系統,直到被 Google 購併之後,以機器人為圖案如圖 2.16, 正式對外公布 Android 此作業系統,並且和數家硬體製造商、軟體開發商、電信 營運商合作成立開放手機聯盟(Open Handset Alliance,OHA),持續開發改良此系 統。為了吸引更多的開發人員投入,Google 開放 Android 的原始碼,讓許多硬體 製造商如台灣的宏達電公司和韓國三星科技公司開發屬於自己的行動裝置,無論 是智慧型手機和平板電腦,皆以 Android 系統為基礎開發。而且 Google 也發布專 屬的 Google Play 線上應用程式商店,推出將近 60 萬個官方認證的應用程式給使 用者下載,形成龐大的行動裝置生態圈。. 圖 2.16 Android 圖案. 2.5.1 Android 系統的優點:. Android 作業系統自推出之後,即受到許多開發人員的歡迎,不僅是因為 33.

(42) 第二章 基礎背景介紹. Google 大力支持,其實 Android 作業系統還有很多優點,以下是有關 Android 作 業系統的優點。 1. 市場占有率第一: 根據 IDC(International Data Corporation)2013 年第一季的報告指出,目前智慧型 手持裝置的作業系統中,Android 作業系統的市場佔有率為 79%的比例拿下第 一。 2. 開放: 可以根據開發者本身的需求,修改或是擴充 Android 平台,而不需要負擔任何 費用,可降低開發程式的相關費用。 3. 與 JAVA 程式語言關聯性高: 開發 Android 作業系統平台下的應用程式皆是採用 JAVA 程式語言,所以可以 將 PC 版的 JAVA 程式直接移植到 Android 作業系統平台上去執行,而不需要 重新設計程式。 4. 支援許多多媒體格式: Android 作業系統支援常見的視訊和音樂,以及各種圖片格式,如 H.264、 MPEG4、MP3、BMP、JPG 等等。 5. 應用程式間可以相互溝通: 在 Android 作業系統平台下所開發的應用程式,程式之間只需要簡單的宣告, 即可以相互溝通,達成資料共享或是存取呼叫其他應用程式;抑或是將自己 34.

(43) 第二章 基礎背景介紹. 所開發的應用程式開放給其他應用程式。 6. 支援許多網路通訊協定: Android 作業系統支援許多網路通訊協定,如 GSM/EDGE、CDMA、Bluetooth、 Wi-Fi、LTE、NFC、WiMax 等等。. 2.5.2 Android 平台架構:. 了解 Android 作業系統的特色和優點後,接下來要介紹整個 Android 平台的 架構,讓讀者更加了解 Android 作業系統的運作方式。如圖 2.17 所示,Android 平台架構分成五個部分,分別是應用程式(Application) 、應用程式框架(Application Framework)、程式庫(Libraries)、Android 執行環境(Android Runtime)及最底層的 Linux Kernel,我們將一一做介紹。. 35.

(44) 第二章 基礎背景介紹. 圖 2.17. Android 平台架構. 1. 應用程式(Application): Android 平台內有許多由 JAVA 程式語言開發的應用程式,例如像是日曆、瀏 覽器、電話簿等等,而使用者也可以從 Google Play 線上應用程式商店下載自 己想要的應用程式。 2. 應用程式框架(Application Framework): 開發人員可以透過 Android 平台提供的 API ,來撰寫自己的程式功能,還可 以自由的使用設備的硬體、資源管理、存取位置、封包管理等等的資源,簡 化開發的時間。 36.

(45) 第二章 基礎背景介紹. 3. 程式庫(Libraries): Android 平台不僅提供許多 API ,還提供讓不同元件呼叫的 C/C++程式庫。 4. Android 執行環境(Android Runtime): 在 Android 平台內,每個應用程式皆分配了專有的 Dalvik 虛擬機,和 JAVA 虛擬機架構不同,JAVA 虛擬機使用的是堆疊(Stack)方式,而 Dalvik 虛擬機使 用的則是暫存器(Register)方式。 5. Linux Kernel: Android 平台採用的是 Linux2.6 版本所建構,具有典型的 Linux 排程和功能, 對其進行修改和擴充,並提出 Android HAL(Hardware Abstraction Layer)架構, 將其 Android framework 與 Linux kernel 隔開,此種中介層的設計模式,使得以 後 Android 平台移植到其它硬體設備可獲得更高的執行效率。. 37.

(46) 第三章 開發環境及系統功能介紹. 第三章. 開發環境及系統功能介紹. 本章將利用第二章所說明的基本傳輸程式為基礎,發展出完整的系統架構, 整個系統實現的目標,在於建立起一個網路平台,提供傳輸的網路服務。開發的 對象分別是桌上型電腦和平板電腦,接下來我們會一一來做介紹。. 3.1 開發環境介紹. 在本小節我們分別要介紹桌上型電腦和平板電腦的開發環境,首先是桌上型 電腦,開發環境如下: 桌上型電腦開發環境: CPU:Intel Core i7 作業系統:Windows 7 開發語言:JAVA 7 開發環境:Eclipse Standard 4.3,可至該網站下載介面取得 (http://www.eclipse.org/downloads/)。 編譯環境:JAVA SE Development Kit 7u25,可至該網站下載介面取得 (http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-18802 60.html)。 平板電腦開發環境: 型號:ASUS Transformer Pad TF300T 38.

(47) 第三章 開發環境及系統功能介紹. 處理器:四核心處理器 作業系統:Android 4.0. 3.2 系統功能說明. 本論文設計出的系統,可以提供給使用者下列的功能:. 1.. 跨平台: Client 端方面,會有各種不同的裝置需要進行連線,而為了要解決各種 裝置和 Server 端相互溝通的問題,例如可攜式數位全像顯微鏡系統或者是智 慧型行動裝置和實驗室主機的相互溝通。本系統首要的提供的功能在於整合 所有裝置,以跨平台的特性,讓所有裝置皆可和 Server 端連線,而毋須擔心 會有無法連線的問題。. 2. 支援 TCP/IP 網路協定: 傳送資料到 Server 端時,必須連結網際網路,然而網路底層總是有許多 細節需要設定,為避免增加使用者的負擔,本系統支援 TCP/IP 的網路協定, 透過本系統提供的網路服務,只需要連結網路即可,而不用去理會 TCP/IP 底層的所有相關設定,例如像是封包交換和交握等細節。 3. 支援多對一傳輸: 考量到本系統的未來會有更多的使用者使用,若是同時出現多個 Client 39.

(48) 第三章 開發環境及系統功能介紹. 端的裝置需進行連線,本系統提供可以支援多對一的機制。系統 Server 端會 採用佇列的方式,先進先出(FIFO)模式,替 Client 端安排執行的順序,避免 多個 Client 端連線時,出現系統當機的情況。 4. 安全性: 透過整合浮水印認證的機制,使用者不需要擔心傳送出去的資料是否會 在中途遭惡意人士竄改 。 5. 透過檔案共享,Server 端可和 Matlab 運算軟體結合: 在一般的實驗情況中,Server 端的主機必須有相關人士操作運算軟體, 將其結果計算出來。若是要採自動化的模式,系統必須提供整合運算軟體的 功能。本系統的 Server 端採用檔案共享的方式,和 Matlab 運算軟體進行溝 通運算,就算沒有相關人待在 Server 端操作,也可以自動運算,將結果回傳 給 Client 端,達成自動化的效果。 6. 提供方便使用的使用者介面: 考量到一般研究人員並沒有資訊工程相關背景,於是本系統提供的使用者介 面,可讓整個系統的操作更為容易,而且也可以將欲調整的參數、欲傳送的資料, 一起傳送過去,而相關使用者介面的介紹,將會在下一章進行說明。. 40.

(49) 第三章 開發環境及系統功能介紹. 3.3 系統架構. 介紹完相關開發環境及功能介紹後,接下來要實作出我們的系統。本論文所 規劃的系統架構如圖 3.1,目的在於整合所有裝置,無論是行動裝置還是實驗 室的電腦,提供一個網路平台。在本系統架構中,所有裝置視為 Client 端,遠 端的主機視為 Server 端。Client 端方面,只需要連結網路,透過網路服務,即 可將資料傳給遠端的 Server 端,經過 Server 端計算後,將結果回傳給 Client 端。整個過程即時且方便,可讓研究人員在短時間內獲得需要的結果,並根 據這些結果做出最佳的判斷,而毋須將樣本帶入實驗室才能進行檢測,大大 減少實驗的時間。. 圖 3.1 系統架構圖. 41.

(50) 第三章 開發環境及系統功能介紹. 3.4 系統運作流程圖. 了解完整個系統的架構後,接著要介紹的是,系統運作流程圖的所有細節。 首先,若是要進行生物觀察和醫療檢測,必須先獲得樣本檔案,或是利用行動裝 置拍攝要傳送的全像片。透過日漸發展的行動裝置,抑或是可攜式數位全像顯微 鏡系統,獲得的全像片資料更加多元,系統運作流程圖的第一步,就是從 Client 端各個裝置如圖 3.2,獲得要傳送的資料如圖 3.3。. 圖 3.2 各種裝置. 圖 3.3 獲得要傳送的資料. 42.

(51) 第三章 開發環境及系統功能介紹. 系統運作流程圖的第二步,使用網路服務中的使用者介面如圖 3.4,利用許多 裝置所拍攝到的全像片資料,若是在傳送的過程中,必須使用複雜的指令和操作, 對於整個系統的使用率必定會下降,於是透過本系統開發的使用者介面,就可以 用來調整參數及傳送資料相關設定,讓非資訊工程相關背景的研究人員也能夠輕 易上手。. 圖 3.4 使用使用者介面. 43.

(52) 第三章 開發環境及系統功能介紹. 系統運作流程圖的第三步,如圖 3.5,從使用者介面調整完相關設定後,若是 要將資料傳送出,必須要連結網路,所以無論是有線網路、無線網路或是 3G 行 動網路,可擇一連結,連結網路後,即可透過網路將資料傳送出去。. 圖 3.5 連結到網路. 44.

(53) 第三章 開發環境及系統功能介紹. 系統運作流程圖的第四步,如圖 3.6,遠端的 Server 端會持續偵測有無資料傳 送過來,若是沒有則持續等待;若是收到從 Client 端傳來的資料,則透過本系統 提供的機制和運算軟體相互溝通進行運算後,將其結果回傳給 Client 端,整個過 程 Server 端不需要有相關人士,即可完成自動化的計算且傳輸。. 圖 3.6. Server 端收到資料後進行計算,將結果回傳. 45.

(54) 第三章 開發環境及系統功能介紹. 系統運作流程圖的第五步,如圖 3.7,Server 端計算完後的結果,經由網路, 將回傳的結果傳到 Client 端的裝置上。而 Client 端可藉由使用者介面觀察到回傳 的結果如圖 3.8。. 圖 3.7 將結果回傳到 Client 端. 圖 3.8 回傳的結果 46.

(55) 第四章 系統操作說明. 第四章 系統操作說明. 本章將介紹整個系統的操作說明,分別說明桌上型電腦和筆記型電腦的圖形 化介面和平板電腦的圖形化介面。 4.1 桌上型電腦和筆記型電腦的圖形化介面介紹 圖 4.1 為桌上型電腦和筆記型電腦的圖形化介面,讓使用者可以方便的操作 此系統,而不需要像之前第二章介紹的操作模式是採用命令提示字元模式 (Command Line),此使用者介面主要的功能,是給使用者在 Client 端調整參數之 用。而圖 4.1 上方標註紅色框框的地方,代表有四個部份可以調整參數,分別是 Calculation Parameter、Calibration Parameter、Measurement Mode、System Parameter, 等下我們會一一做介紹。. 圖 4.1 桌上型電腦和筆記型電腦的圖形化介面. 第一步是圖 4.2 的 Calculation Parameter 部分,用來輸入相關計算的參數,單 位皆是公尺,輸入的範圍皆為介於-30 到 30,首先第一格 Camera Pixel Pitch 欄位 47.

(56) 第四章 系統操作說明. 是輸入像素,輸入完成後,點選旁邊的 OK 按鈕,操作方式以此類推。第二格 Wavelength 欄位是輸入雷射光源波長。第三格 Reconstruction distance 欄位是重建 距離。第四格 Focal Length of MO 欄位是物鏡的焦距。第五格 Length MO to Sample 欄位是物鏡到樣本的距離。另外 Select One(ROI2)欄位為是否選擇顯示區域,可 供使用者點選是否要傳送顯示區域的圖檔。. 圖 4.2 Calculation Parameter 部分. 第二步是圖 4.3 的 Calibration Parameter 部分,用來調整相關儀器的設定。首 先是 Phase Unwrapping 欄位用來選取是否執行相位展開。若是選取,則要調整以 下的參數,分別是 Titled Calibration 和 Sphere Aberration Calibration 部分,Titled Calibration 中的 kdx 欄位是 x 方向傾斜修正,kdy 欄位是 y 方向傾斜修正。Sphere Aberration Calibration 中的 SAx 欄位是 x 方向球面波傾斜修正,SAy 欄位是 y 方 向球面波傾斜修正。. 48.

(57) 第四章 系統操作說明. 圖 4.3 Calibration Parameter 部分. 第三步是圖 4.4 的 Measurement Mode 部分,用來選取其它欲傳送的圖檔。首 先是 Spectrum 欄位用來選取是否顯示頻譜影像。若是選取,則調整以下的參數, ROI_x1 欄位是起點 x,ROI_x2 欄位是終點 x;ROI_y1 欄位是起點 y,ROI_y2 欄 位是終點 y。接著 Amplitude_image 欄位用來選取是否顯示振幅影像。3_D_image 欄位用來選取是否顯示 3D 影像。Phase_image 用來選取是否顯示相位影像。. 圖 4.4 Measurement Mode 部分 49.

(58) 第四章 系統操作說明. 第五步是圖 4.5 的 System Parameter 部分,用來設定傳送資料給 Server 端的 前置作業。首先是 Save Parameter 按鈕,按下之後,剛剛在前面三個部份的參數 設定皆會被保留成為一個 TXT 檔如圖 4.6,讓使用者待會可將此 TXT 檔傳送給 Server 端。. 圖 4.5 System Parameter 部分. 圖 4.6 參數設定的 TXT 檔. 第六步是圖 4.7 中的 Picture 按鈕,可讓使用者用來選取欲傳送的圖檔。而 圖 4.8 則是點選 Picture 按鈕出現的畫面,選好圖檔後,按下開啟的按鈕。. 50.

(59) 第四章 系統操作說明. 圖 4.7 點選 Picture 按鈕. 圖 4.8 選取檔案後點選開啟按鈕. 第七步是圖 4.9 的 Parameter 按鈕,讓使用者選取剛剛第五步保留下來的參 數 TXT 檔。圖 4.10 則是點選 Parameter 按鈕出現的畫面,選好 TXT 檔後,按下 開啟的按鈕。. 51.

(60) 第四章 系統操作說明. 圖 4.9 點選 Parameter 按鈕. 圖 4.10 選取檔案後點選開啟按鈕. 第八步是圖 4.11 的 Server IP 欄位,輸入 Server 端的 IP,接著輸入 Account 及 Password 欄位的帳號密碼,結束後點選 Send 按鈕,將資料傳送出去,並且等 待 Server 端將資料回傳。. 52.

(61) 第四章 系統操作說明. 圖 4.11 輸入帳密 Server IP 後,點選 Send 按鈕. 第九步如圖 4.12,等到傳送完成且收到回傳資料後,點下 Show 按鈕,即可 收到回傳的檔案如圖 4.13。. 圖 4.12 點下 Show 按鈕. 圖 4.13 收到的檔案 53.

(62) 第四章 系統操作說明. 4.2 行動裝置的圖形化介面介紹. 介紹完桌上型電腦和筆記型電腦的圖形化介面後,本節要介紹的是專為行動 裝置開發的圖形化介面。圖 4.14 為行動裝置的圖形化介面,大致上的設計模式 參考桌上型電腦和筆記型電腦的圖形化介面。我們以 ASUS Transformer Pad TF300T 型號的 10.1 吋平板電腦為基本開發。圖 4.14 紅框處分別是 Calculation Parameter、Calibration Parameter、Measurement Mode、System Parameter,第一步 採用觸控的方式輸入所需的參數。. 圖 4.14 平板電腦的使用者介面. 54.

(63) 第四章 系統操作說明. 第二步如圖 4.15 ,輸入完所有參數後,點選 Sava All Parameter 按鈕,在平 板電腦中即會產生如圖 4.16 的 TXT 檔。. 圖 4.15 點選 Sava All Parameter 按鈕. 圖 4.16 產生的 TXT 檔. 55.

(64) 第四章 系統操作說明. 第三步如圖 4.17,點選 BMP file 按鈕,選取欲傳送的圖檔如圖 4.18. 圖 4.17 點選 BMP file 按鈕. 圖 4.18 欲傳送的圖檔. 56.

(65) 第四章 系統操作說明. 第四步如圖 4.19,輸入帳號密碼及 Server 端 IP 後,點選 Send 按鈕,即可將 參數檔及圖檔送出。. 圖 4.19 輸入帳號密碼及 Server 端 IP 後,點選 Send 按鈕. 57.

(66) 第四章 系統操作說明. 第五步如圖 4.20,等到傳送完成且收到回傳資料後,分別點選 Output 1、Output 2、Output 3、Output 4、Output 5 按鈕,即可收到如圖 4.21 所有圖檔。. 圖 4.20 點選 Output 1、Output 2、Output 3、Output 4、Output 5 按鈕. 圖 4.21 收到的檔案. 58.

(67) 第五章 結論. 第五章 結論. 本論文利用 JAVA 程式語言,以數位全像顯微鏡系統為對象,實作出完整的 系統,透過系統所提供的功能,整合所有裝置,並提供一個網路平台,開發出網 路服務。透過連結網路,所有研究人員皆可隨時隨地傳送資料給遠端的主機進行 運算,不僅大幅縮短整個實驗流程的時間,也解決了樣本必須往返運送,可能所 造成的誤差。本系統提供的使用者介面,使得非資訊工程相關背景的研究人員也 可以簡易使用,毋須透過底層的控制指令或是程式撰寫,可直接利用使用者介面 調整參數,讓研究人員可以專心於實驗的過程,而非操作系統時額外造成的負擔。. 59.

(68) 參考著作. 參考著作. [1] M. Lee ; O. Yaglidere ; A. Ozcan ,” Field-portable reflection and transmission microscopy based on lensless holography,” BIOMEDICAL OPTICS EXPRESS, Vol .2, No.9, pp.2721-2730 , Sep. 2011. [2] D. Breslauer ; R. N. Maamari ; N.A. Switz; W. A. Lam; D. A. Fletcher,” Mobile Phone Based Clinical Microscopy for Global Health Applications,” PLoS ONE, Vol .4, No.7, e6320 , 2009. [3] S. O. Isikman; W. Bishara; U.Sikora; O. Yaglidere; J. Yeaha ; A. Ozcan, ”Field-portable lensfree tomographic microscope,” The Royal Society of Chemistry, pp.2222-2230, 2011. [4] Z. J. Smith; K. Chu; A. R. Espenson; M. Rahimzadeh; A. Gryshuk; M. Molinaro; D. M. Dwyre; S. Lane; D. Matthews; S. Wachsmann-Hogiu,” Cell-Phone-Based Platform for Biomedical Device Development and Education Applications,” Vol .6, No.3, e17150, 2011. [5] D. Tseng; O. Mudanyali; C. Oztoprak; S. O. Isikman; I. Sencan; O. Yaglidere; A. Ozcan, “Lensfree microscopy on a cellphone,” Lab Chip , Vol .10, No.14, pp.1787–1792 , 2010. 60.

(69) 參考著作. [6] O. Mudanyali; D. Tseng; C. Oh; S. O. Isikman; I. Sencan; W. Bishara; C. Oztoprak; S. Seo; B. Khademhosseini; A. Ozcan, “Compact, light-weight and cost-effective microscope based on lensless incoherent holography for telemedicine applications,” Lab Chip , Vol .10, No.11, pp.1417–1428 , 2010. [7]H. Shen; Z. Xu; B. Dalager; V. Kristiansen; Ø . Strøm; M, S. Shur; T, A.Fjeldly; J.Q. Lu; T. Ytterdal,” Conducting Laboratory Experiments over the Internet,” IEEE TRANSACTIONS ON EDUCATION, Vol. 42, No. 3, Aug. 1999. [8]吳亞峰; 索依娜,學會 Android 應用開發的 18 堂關鍵基礎課程,博碩文化,台 北,2011. [9]賈蓉生; 吳宗靜; 施嘉佶,JAVA 網路程式設計與資料傳遞,易習圖書,台北, 2010. [10]施威銘研究室,最新 JAVA 2 程式語言,旗標出版社,台北,2007.. 61.

(70) 附錄. 附錄:Server 端的運作模式. 一般的網路服務,當 Client 端傳送資料給 Server 端的時候,Server 端會有專 門的資訊工程師解決後端的問題。但由於本系統是專為非資訊工程系的研究人員 開發,所以必須考量到 Server 端沒有相關人員操作,為了解決此一問題,Server 端必須採用自動化的方式接收資料,並和運算軟體結合,將運算後的結果自動回 傳給 Client 端,透過這樣的方式,才能有效解決這個問題。 在這邊的運算軟體我們採用 Matlab,Server 端必須和 Matlab 進行溝通,其中 我們採用檔案共享的方式,將其 Client 端收到的資料,直接放到和 Matlab 溝通的 資料夾下,用來進行運算,結束後回傳給 Client 端。但會遭遇到一個問題,即是 JAVA 系統在檔案共享的情況下,就算將資料回傳後還是會將其鎖住,導致 Matlab 會形成無限迴圈,造成重複執行的情況,為了要解決這個問題,必須將一個 log.txt 檔放入 Matlab 的資料夾下,將 Matlab 暫停下來。以下是和 Matlab 進行溝通的程 式片段: 首先,需要宣告一個陣列 byteData[],用來將 log.txt 檔,複製到 Matlab 溝通 的資料夾下:. byte byteData[] = new byte[1];. 62.

(71) 附錄. 採用 FileInputStream 類別,先打開 log.txt 檔: FileInputStream fi = new FileInputStream("C:\\Users\\knight\\log.txt");. 使用 FileOutputStream 類別,打開和 Matlab 溝通的資料夾,準備將資料複製 過去:. FileOutputStream fo = new FileOutputStream("C:\\Users\\knight\\matlabpic\\log.txt");. 接下來採用 while 迴圈,使用 FileInputStream 類別中方法 read(),先讀出陣列 byteData[]一個字元的資料,判斷是否為結尾字元,若是結尾字元則停止傳輸,代 表檔案傳輸完成;若不是則用 FileOutputStream 類別中的方法 wrire (),將檔案一 個字元一個字元複製過去: int num; while((num = fi.read(byteData)) !=-1) fo.write(byteData); fo.close();. 63.

(72) 附錄. 以下是完整 Server 端的程式:. import java.io.*; import java.net.*; import java.util.*; import java.awt.*; import java.lang.*; // 匯入 JAVA 程式相關套件,分別是 io net util awt lang 套件 public class server19 { static ServerSocket ss; Socket socket; static int port; static String outfilename; static String outfilename2; DataOutputStream outstream; public server19() { try { ss = new ServerSocket(1234);. 64.

(73) 附錄. while(true) // 持續偵測是否有 Client 端連線 { System.out.println("server created"); System.out.println("waiting for client to connect...."); socket= ss.accept(); //回覆 Client 端並建立連線 System.out.println("connected from client "+ socket.getInetAddress().getHostAddress());. instream = new DataInputStream(socket.getInputStream()); // 接收資料 FileOutputStream fos = new FileOutputStream(outfilename);. messagein = 0; messagein2 = 0; while(messagein!=-1) { messagein = instream.readInt(); bw.write(messagein); }. 65.

(74) 附錄. FileOutputStream fos2 = new FileOutputStream(outfilename2); while(messagein2!=-1) { messagein2 = instream.readInt(); fos2.write(messagein2); } System.out.println("Please waiting"); File file = new File("C:\\Users\\ s\\output1.bmp"); File file2 = new File("C:\\Users\\ r\\output2.bmp"); File file3 = new File("C:\\Users\\ a\\output3.bmp"); File file4 = new File("C:\\Users\\ \\output4.bmp"); File file5 = new File("C:\\Users\\ \\output5.bmp"); // 使用File類別,宣告出要傳送五個圖檔的物件 while((file5.isFile()==true || file4.isFile()==true ||file3.isFile()==true || file2.isFile()==true || file.isFile()==true) && t==0) {//當運算結果出來,即可回傳 if(file.isFile()==true) {// 當file物件有資料時,即可準備回傳 FileInputStream fis = new FileInputStream(file); outstream = new DataOutputStream(socket.getOutputStream()); while((i = fis.read())!=-1)//使用while迴圈一位元一位元傳送 outstream.writeInt(i); outstream.writeInt(i); outstream.flush(); System.out.println("BMP Data sent to internet successfully"); fis.close(); }. 66.

(75) 附錄. if(file2.isFile()==true) {//當file2物件有資料時,即可準備回傳 FileInputStream fis2 = new FileInputStream(file2); outstream2 = new DataOutputStream(socket.getOutputStream()); while((i = fis2.read())!=-1) outstream2.writeInt(i); outstream2.writeInt(i); outstream2.flush(); System.out.println("BMP2 Data sent to internet successfully"); fis2.close(); } if(file3.isFile()==true) {//當file3物件有資料時,即可準備回傳 FileInputStream fis3 = new FileInputStream(file3); outstream3 = new DataOutputStream(socket.getOutputStream()); while((i = fis3.read())!=-1) outstream3.writeInt(i); outstream3.writeInt(i); outstream3.flush(); System.out.println("BMP3 Data sent to internet successfully"); fis3.close(); } if(file4.isFile()==true) {//當file4物件有資料時,即可準備回傳 FileInputStream fis4 = new FileInputStream(file4); outstream4 = new DataOutputStream(socket.getOutputStream()); while((i = fis4.read())!=-1) outstream4.writeInt(i); outstream4.writeInt(i); outstream4.flush(); System.out.println("BMP4 Data sent to internet successfully"); fis4.close(); } 67.

(76) 附錄. if(file5.isFile()==true) {//當file5物件有資料時,即可準備回傳 FileInputStream fis5 = new FileInputStream(file5); outstream5 = new DataOutputStream(socket.getOutputStream()); while((i = fis5.read())!=-1) outstream5.writeInt(i); outstream5.writeInt(i); outstream5.flush(); System.out.println("BMP5 Data sent to internet successfully"); fis5.close(); } //將log.txt檔複製到Matlab的資料夾下,使其中斷執行 byte byteData[] = new byte[1]; FileInputStream fi = new FileInputStream("C:\\Users\\ \log.txt"); FileOutputStream fo = new FileOutputStream("C:\\Users\\ matlabpic\\log.txt"); int num; while((num = fi.read(bytData)) !=-1) fo.write(byteData); fo.close(); }. 68.

(77)

參考文獻

Outline

相關文件

請問下列的

有關於 Java 程式語言,下列何者敘述不正確?(A)Java 程式語言透過 extends 提供多重繼承 (Multiple

public static double calculate(int i, int j) throws ArithmeticException,

National Taiwan University July 9, 2005 Page 5..

Contains the core Swing components, including most of the model interfaces and support

JRE (Java Runtime Environment): for users, JVM + basic libraries JDK (Java Development Kit): JRE + compilers + ... —jdk-6u12-windows-i586-p.exe or other platform

• Copy a value from the right-hand side (value or expression) to the space indicated by the variable in the left-hand side.. • You cannot write codes like 1 = x because 1 cannot

• Instead, static nested classes do not have access to other instance members of the enclosing class. • We use nested classes when it