朱亞林
(南通師范高等專科學校,江蘇如皋 226500)
局域網內Android與PC平臺剪貼板同步功能的實現
朱亞林
(南通師范高等專科學校,江蘇如皋226500)
智能終端的普及使得人們的信息傳輸與數據交換變得更加方便,同時,也使得智能終端與PC平臺之間的關系變得密不可分。在智能終端與PC平臺進行數據交換的各項功能中,有一類功能非常實用,但在主流軟件中并未普及,那就是兩者之間的剪貼板的實時同步功能。本文將借助于Socket的強大功能,設計實現一個局域網內Android系統與PC平臺間實時同步剪貼板功能的程序。
局域網;Android;PC;Python;Socket;剪貼板;同步
隨著智能手機的普及,智能終端與PC平臺之間的信息互通也已成為潮流走向。人們可以通過各種手機管理的軟件,在PC平臺上連接、管理智能終端設備上的聯系人、短信、各類文件(照片、視頻、聲音)等內容。其實,在日常工作、生活中,智能終端與PC平臺間的另一種信息交互功能也處于同等重要位置,那就是系統剪貼板上的信息內容的同步,即:在智能終端上對一段文字或者網址等元素進行復制,此時,剪切板內容會自動同步更新到在局域網中已經實現了配對的PC平臺的剪貼板上以備采選使用,反之亦然。具體可體現為將手機上的網址復制到PC平臺上打開、將手機短信復制到PC平臺上、在PC平臺上將短信內容執行編輯后,再復制到智能終端上發送等等。
剪貼板同步功能的實現與應用,將會大大提高智能終端與PC平臺間的信息交換效率,使得兩者之間的連接更為方便、更為高效。本文將選擇時下流行的Android智能終端及全平臺支持的Python語言作為實驗環境,論述此項功能的研究設計與實現。
本文所實現的剪貼板同步功能是指,在同一局域網內的智能終端與PC平臺通過一定的網絡協議建立連接之后,進行剪貼板的數據同步傳輸。本文選擇了Socket來實行網絡數據傳輸,究其原因表現在如下2個方面[1]。首先,Socket是一種性能完善的進程通信機制,應用程序可以通過其向網絡發出請求或者應答網絡請求,進行網絡通信;其次,由于Android軟件開發是基于Java語言來展示最終實現效果,而PC平臺采用的則是跨平臺的Python語言,這2種語言對于Socket在支持上都跡近完美。由此可知,Socket是實現不同設備間剪貼板同步功能的不二之選。
軟件實現的功能描述如下:在智能終端及PC端分別安裝一個軟件,智能終端可簡稱為M,PC端可簡稱為P,M與P處于同一個局域網內,兩者之間通過Socket進行連接。M和P具有相同的功能,那就是監視自身系統的剪貼板內容,當系統剪貼板上的內容發生變化時,則讀取該內容。同時,再將該內容通過已經建立的Socket連接傳輸到另一端,另一端在接收到新的信息之后,將其寫入到本端的系統剪貼板上,以備粘貼之用,從而完成剪貼板信息的同步。
綜上,若要實現上述軟件要求,重點需要完成以下方面的功能設計:一是局域網內智能終端與PC平臺的配對問題;二是在智能終端和PC平臺上監聽系統剪貼板的問題;三是在Socket連接中的信息傳輸問題;四是智能終端和PC平臺上系統剪貼板的信息寫入問題。在此,針對這4項功能的算法思想實現將給出如下的綜合論述。
2.1智能終端與PC平臺的Socket連接的建立
下面,首先簡述使用Socket建立網絡連接的基本過程。建立Socket連接至少需要一對套接字,其中一個運行于客戶端,稱之為ClientSocket,另外一個運行于服務器端,稱之為ServerSocket。套接字之間的連接過程需要經過3個步驟,分別是:服務器監聽、客戶端請求、連接確認。根據上述這3個步驟進行分析,本文將PC平臺端確定為服務器端,Android端確定為客戶端,為此提出基于Socket通信的實現思路如下:在PC端使用Python語言,設計一個等待接入的模塊,通過Android端設計一個主動接入的模塊,兩者之間再利用IP地址和端口進行匹配,從而完成連接的建立。具體實現過程如下。
2.1.1PC端的實現[2]
在本段程序中,PC端將向局域網開放了一個8080端口,作為Socket通信端口,而此時,只要Android端主動發送請求至該端口,就可以完成連接了。
具體實現代碼如下:

2.1.2Android端的實現
在Android端的程序設計中,需要制作一個連接界面,利于使用者輸入PC端IP地址及連接端口。當用戶點擊連接時,Android端就會向PC端發回連接請求,PC端應答后,連接成功。
Android端連接的主要代碼如下:

連接成功后,Android端界面及PC端界面分別如圖1、2所示。
2.2剪貼板監聽功能的實現
2.2.1Android端剪貼板監聽功能的實現
軟件需要實現的效果是,當Android端發生了復制、剪貼的任何操作行為時,程序都能捕獲到剪貼板的變化,并且獲取操作的內容,以備發送到PC端滿足需求使用。在Android端,研究使用Android開發環境中所提供的ClipboardManager類。通過使用該類中的OnPrimaryClipChangedListener接口可以輕松實現對Android系統剪貼板的監聽。
具體實現監聽功能的代碼如下:
final ClipboardManager clipboard=(ClipboardManager)this.getSystemService(Context.CLIPBOARD_SERVICE);


圖1 Android端程序界面Fig.1 Android end program interface

圖2 PC端程序界面Fig.2 PC end program interface
2.2.2PC端剪貼板監聽功能的實現
PC端的剪貼板監聽實現方式與Android端有所不同,由于PC端存在多操作系統平臺的可能,而每種平臺的剪貼板管理方式又不一樣,所以很難使用統一的方式直接對剪貼板進行直接監聽。為此,軟件所使用的是一種折衷的方式,即使用Python語言構建一個ClipboardListener類,實際使用時,將由此類創造一個對象,該對象會使用pyperclip模塊[3]以指定的時間間隔,反復地對系統剪貼板的內容進行讀取和比較,當內容發生變化時,則表明發生了復制或剪切的動作,此時便將更新后的內容通過CopyContentSending函數發送到Android端,以便剪貼板內容的同步。特別說明:pyperclip模塊是跨平臺的,所以符合PC端多平臺的需要。
具體實現代碼如下:


2.3Socket連接中信息的雙向傳輸
2.3.1Android端數據的發送與接收
Android端數據發送與接收功能的實現,主要依賴于socket.getOutputStream和socket.getInputStream這2個方法。
具體實現代碼如下:1)接收PC平臺信息

2)向PC平臺發送信息

2.3.2PC端數據的發送與接收
PC端使用Python來實現數據傳輸的過程也非常簡單,基本原理與Android端相同,只要使用data=tcpCliSock.recv(BUFSIZ)來接收數據,而將信息保存在變量data中;另外,使用tcpCliSock.send(data)來發送數據,其中變量data保存的即是待發送的信息。
2.4剪貼板信息的寫入
當同步數據傳輸到了對應的設備上,如何將該數據寫入到剪貼板以備使用,將是整個程序步驟的終極一步,也是至為關鍵的一步。這里,還是將從Android端和PC端2個角度而分別給出解決辦法。
2.4.1Android端剪切板數據的寫入
設計中,主要還是使用前面提及的ClipboardManager類[4]來實現此項功能。ClipboardManager類中有一個setPrimaryClip方法。該方法可用來將指定內容設置到剪貼板上,因此高度貼切符合該功能的實現需要。
具體實現代碼如下:


2.4.2PC端剪切板數據的寫入
PC端嘗試使用Python中Tkinter[5]模塊來操作系統的剪切板。Tkinter和上文提到的pyperclip一樣,也是在全平臺下兼容,因此,可無需再考慮平臺因素。Tkinter模塊中對于系統剪貼板的操作主要包括如下方面:一是clipboard_get,用于獲得剪貼板內容;二是clipboard_append,用于設置系統剪貼板內容;三是clipboard_clear(),用于清空系統剪貼板,此處設計中用到的是clipboard_append。
具體實現代碼如下:

綜合上述分析、設計可見,本文實現、并完成了基于Android系統的智能終端與PC平臺的系統剪貼板的同步功能。當安裝有該研發軟件的Android設備與PC設備在同一局域網內運行,通過建立Socket連接后,就可以獲取相互之間剪貼板數據的實時同步效果了。
當然,也需看到,文中研發程序的功能還未臻完善,在后續功能拓延中,可以將Android端的手工輸入IP地址以及連接端口的過程優化為自動掃描服務器端,即當服務器開放服務端口,智能終端在掃描到端口后,就可以自動提示,并進行配對連接。另外,Socket功能非常強大,在實際使用中,不僅可以將其用來進行簡單文本的傳輸,也可以進行各類文件的傳輸,如此即會使得智能終端與PC平臺端的數據交換趨于更為靈活和豐富。
[1]李現凡,高建榮.基于Socket編程接口的局域網即時通信系統的開發實現[J].常州輕工職業技術學院學報,2006(4):14-18.
[2]宋瑾.基于ProtocolBuffer協議的服務端-客戶端通信[J].電腦編程技巧與維護,2014(12):100-101.
[3]Magnus Lie Hetland.Beginning Python From Novice to Professional[M].2th ed.New York:APress,2009.
[4]Android.ClipboardManager|Android Developers[DB/OL].[2016-03-29].http://developer.android.com/reference/android/ content/ClipboardManager.html.
[5]Python Wiki.TkInter-Python Wiki[DB/OL].[2016-03-29]. https://wiki.python.org/moin/TkInter.
Implementation of Android and PC platform clipboard synchronization in LAN
ZHU Yalin
(Nantong Normal College,Rugao Jiangsu 226500,China)
The popularity of intelligent terminals makes people's information transmission and data exchange become more convenient,meanwhile makes the relationship between the smart terminal and PC platform become inseparable.In the various functions of data exchange between the smart terminal and PC platform,a kind of function is very useful,but in the mainstream software is not universal,that is the real time synchronization between the two clipboard.With the help of the powerful function about Socket,the paper designs and implements real-time synchronization clipboard functions between the LAN Android system and PC platform program.
LAN;Android;PC;Python;Socket;clipboard;synchronous
TP393.0
A
2095-2163(2016)03-0046-03
2016-04-11
全國教育信息技術研究2015年度青年專項課題(156242691)。
朱亞林(1982-),男,碩士,講師,主要研究方向:計算機應用技術、信息技術。