朱亞林
(南通師范高等專科學(xué)校,江蘇如皋 226500)
局域網(wǎng)內(nèi)Android與PC平臺(tái)剪貼板同步功能的實(shí)現(xiàn)
朱亞林
(南通師范高等專科學(xué)校,江蘇如皋226500)
智能終端的普及使得人們的信息傳輸與數(shù)據(jù)交換變得更加方便,同時(shí),也使得智能終端與PC平臺(tái)之間的關(guān)系變得密不可分。在智能終端與PC平臺(tái)進(jìn)行數(shù)據(jù)交換的各項(xiàng)功能中,有一類功能非常實(shí)用,但在主流軟件中并未普及,那就是兩者之間的剪貼板的實(shí)時(shí)同步功能。本文將借助于Socket的強(qiáng)大功能,設(shè)計(jì)實(shí)現(xiàn)一個(gè)局域網(wǎng)內(nèi)Android系統(tǒng)與PC平臺(tái)間實(shí)時(shí)同步剪貼板功能的程序。
局域網(wǎng);Android;PC;Python;Socket;剪貼板;同步
隨著智能手機(jī)的普及,智能終端與PC平臺(tái)之間的信息互通也已成為潮流走向。人們可以通過各種手機(jī)管理的軟件,在PC平臺(tái)上連接、管理智能終端設(shè)備上的聯(lián)系人、短信、各類文件(照片、視頻、聲音)等內(nèi)容。其實(shí),在日常工作、生活中,智能終端與PC平臺(tái)間的另一種信息交互功能也處于同等重要位置,那就是系統(tǒng)剪貼板上的信息內(nèi)容的同步,即:在智能終端上對(duì)一段文字或者網(wǎng)址等元素進(jìn)行復(fù)制,此時(shí),剪切板內(nèi)容會(huì)自動(dòng)同步更新到在局域網(wǎng)中已經(jīng)實(shí)現(xiàn)了配對(duì)的PC平臺(tái)的剪貼板上以備采選使用,反之亦然。具體可體現(xiàn)為將手機(jī)上的網(wǎng)址復(fù)制到PC平臺(tái)上打開、將手機(jī)短信復(fù)制到PC平臺(tái)上、在PC平臺(tái)上將短信內(nèi)容執(zhí)行編輯后,再復(fù)制到智能終端上發(fā)送等等。
剪貼板同步功能的實(shí)現(xiàn)與應(yīng)用,將會(huì)大大提高智能終端與PC平臺(tái)間的信息交換效率,使得兩者之間的連接更為方便、更為高效。本文將選擇時(shí)下流行的Android智能終端及全平臺(tái)支持的Python語言作為實(shí)驗(yàn)環(huán)境,論述此項(xiàng)功能的研究設(shè)計(jì)與實(shí)現(xiàn)。
本文所實(shí)現(xiàn)的剪貼板同步功能是指,在同一局域網(wǎng)內(nèi)的智能終端與PC平臺(tái)通過一定的網(wǎng)絡(luò)協(xié)議建立連接之后,進(jìn)行剪貼板的數(shù)據(jù)同步傳輸。本文選擇了Socket來實(shí)行網(wǎng)絡(luò)數(shù)據(jù)傳輸,究其原因表現(xiàn)在如下2個(gè)方面[1]。首先,Socket是一種性能完善的進(jìn)程通信機(jī)制,應(yīng)用程序可以通過其向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求,進(jìn)行網(wǎng)絡(luò)通信;其次,由于Android軟件開發(fā)是基于Java語言來展示最終實(shí)現(xiàn)效果,而PC平臺(tái)采用的則是跨平臺(tái)的Python語言,這2種語言對(duì)于Socket在支持上都跡近完美。由此可知,Socket是實(shí)現(xiàn)不同設(shè)備間剪貼板同步功能的不二之選。
軟件實(shí)現(xiàn)的功能描述如下:在智能終端及PC端分別安裝一個(gè)軟件,智能終端可簡稱為M,PC端可簡稱為P,M與P處于同一個(gè)局域網(wǎng)內(nèi),兩者之間通過Socket進(jìn)行連接。M和P具有相同的功能,那就是監(jiān)視自身系統(tǒng)的剪貼板內(nèi)容,當(dāng)系統(tǒng)剪貼板上的內(nèi)容發(fā)生變化時(shí),則讀取該內(nèi)容。同時(shí),再將該內(nèi)容通過已經(jīng)建立的Socket連接傳輸?shù)搅硪欢?,另一端在接收到新的信息之后,將其寫入到本端的系統(tǒng)剪貼板上,以備粘貼之用,從而完成剪貼板信息的同步。
綜上,若要實(shí)現(xiàn)上述軟件要求,重點(diǎn)需要完成以下方面的功能設(shè)計(jì):一是局域網(wǎng)內(nèi)智能終端與PC平臺(tái)的配對(duì)問題;二是在智能終端和PC平臺(tái)上監(jiān)聽系統(tǒng)剪貼板的問題;三是在Socket連接中的信息傳輸問題;四是智能終端和PC平臺(tái)上系統(tǒng)剪貼板的信息寫入問題。在此,針對(duì)這4項(xiàng)功能的算法思想實(shí)現(xiàn)將給出如下的綜合論述。
2.1智能終端與PC平臺(tái)的Socket連接的建立
下面,首先簡述使用Socket建立網(wǎng)絡(luò)連接的基本過程。建立Socket連接至少需要一對(duì)套接字,其中一個(gè)運(yùn)行于客戶端,稱之為ClientSocket,另外一個(gè)運(yùn)行于服務(wù)器端,稱之為ServerSocket。套接字之間的連接過程需要經(jīng)過3個(gè)步驟,分別是:服務(wù)器監(jiān)聽、客戶端請求、連接確認(rèn)。根據(jù)上述這3個(gè)步驟進(jìn)行分析,本文將PC平臺(tái)端確定為服務(wù)器端,Android端確定為客戶端,為此提出基于Socket通信的實(shí)現(xiàn)思路如下:在PC端使用Python語言,設(shè)計(jì)一個(gè)等待接入的模塊,通過Android端設(shè)計(jì)一個(gè)主動(dòng)接入的模塊,兩者之間再利用IP地址和端口進(jìn)行匹配,從而完成連接的建立。具體實(shí)現(xiàn)過程如下。
2.1.1PC端的實(shí)現(xiàn)[2]
在本段程序中,PC端將向局域網(wǎng)開放了一個(gè)8080端口,作為Socket通信端口,而此時(shí),只要Android端主動(dòng)發(fā)送請求至該端口,就可以完成連接了。
具體實(shí)現(xiàn)代碼如下:
2.1.2Android端的實(shí)現(xiàn)
在Android端的程序設(shè)計(jì)中,需要制作一個(gè)連接界面,利于使用者輸入PC端IP地址及連接端口。當(dāng)用戶點(diǎn)擊連接時(shí),Android端就會(huì)向PC端發(fā)回連接請求,PC端應(yīng)答后,連接成功。
Android端連接的主要代碼如下:
連接成功后,Android端界面及PC端界面分別如圖1、2所示。
2.2剪貼板監(jiān)聽功能的實(shí)現(xiàn)
2.2.1Android端剪貼板監(jiān)聽功能的實(shí)現(xiàn)
軟件需要實(shí)現(xiàn)的效果是,當(dāng)Android端發(fā)生了復(fù)制、剪貼的任何操作行為時(shí),程序都能捕獲到剪貼板的變化,并且獲取操作的內(nèi)容,以備發(fā)送到PC端滿足需求使用。在Android端,研究使用Android開發(fā)環(huán)境中所提供的ClipboardManager類。通過使用該類中的OnPrimaryClipChangedListener接口可以輕松實(shí)現(xiàn)對(duì)Android系統(tǒng)剪貼板的監(jiān)聽。
具體實(shí)現(xiàn)監(jiān)聽功能的代碼如下:
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端剪貼板監(jiān)聽功能的實(shí)現(xiàn)
PC端的剪貼板監(jiān)聽實(shí)現(xiàn)方式與Android端有所不同,由于PC端存在多操作系統(tǒng)平臺(tái)的可能,而每種平臺(tái)的剪貼板管理方式又不一樣,所以很難使用統(tǒng)一的方式直接對(duì)剪貼板進(jìn)行直接監(jiān)聽。為此,軟件所使用的是一種折衷的方式,即使用Python語言構(gòu)建一個(gè)ClipboardListener類,實(shí)際使用時(shí),將由此類創(chuàng)造一個(gè)對(duì)象,該對(duì)象會(huì)使用pyperclip模塊[3]以指定的時(shí)間間隔,反復(fù)地對(duì)系統(tǒng)剪貼板的內(nèi)容進(jìn)行讀取和比較,當(dāng)內(nèi)容發(fā)生變化時(shí),則表明發(fā)生了復(fù)制或剪切的動(dòng)作,此時(shí)便將更新后的內(nèi)容通過CopyContentSending函數(shù)發(fā)送到Android端,以便剪貼板內(nèi)容的同步。特別說明:pyperclip模塊是跨平臺(tái)的,所以符合PC端多平臺(tái)的需要。
具體實(shí)現(xiàn)代碼如下:
2.3Socket連接中信息的雙向傳輸
2.3.1Android端數(shù)據(jù)的發(fā)送與接收
Android端數(shù)據(jù)發(fā)送與接收功能的實(shí)現(xiàn),主要依賴于socket.getOutputStream和socket.getInputStream這2個(gè)方法。
具體實(shí)現(xiàn)代碼如下:1)接收PC平臺(tái)信息
2)向PC平臺(tái)發(fā)送信息
2.3.2PC端數(shù)據(jù)的發(fā)送與接收
PC端使用Python來實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)倪^程也非常簡單,基本原理與Android端相同,只要使用data=tcpCliSock.recv(BUFSIZ)來接收數(shù)據(jù),而將信息保存在變量data中;另外,使用tcpCliSock.send(data)來發(fā)送數(shù)據(jù),其中變量data保存的即是待發(fā)送的信息。
2.4剪貼板信息的寫入
當(dāng)同步數(shù)據(jù)傳輸?shù)搅藢?duì)應(yīng)的設(shè)備上,如何將該數(shù)據(jù)寫入到剪貼板以備使用,將是整個(gè)程序步驟的終極一步,也是至為關(guān)鍵的一步。這里,還是將從Android端和PC端2個(gè)角度而分別給出解決辦法。
2.4.1Android端剪切板數(shù)據(jù)的寫入
設(shè)計(jì)中,主要還是使用前面提及的ClipboardManager類[4]來實(shí)現(xiàn)此項(xiàng)功能。ClipboardManager類中有一個(gè)setPrimaryClip方法。該方法可用來將指定內(nèi)容設(shè)置到剪貼板上,因此高度貼切符合該功能的實(shí)現(xiàn)需要。
具體實(shí)現(xiàn)代碼如下:
2.4.2PC端剪切板數(shù)據(jù)的寫入
PC端嘗試使用Python中Tkinter[5]模塊來操作系統(tǒng)的剪切板。Tkinter和上文提到的pyperclip一樣,也是在全平臺(tái)下兼容,因此,可無需再考慮平臺(tái)因素。Tkinter模塊中對(duì)于系統(tǒng)剪貼板的操作主要包括如下方面:一是clipboard_get,用于獲得剪貼板內(nèi)容;二是clipboard_append,用于設(shè)置系統(tǒng)剪貼板內(nèi)容;三是clipboard_clear(),用于清空系統(tǒng)剪貼板,此處設(shè)計(jì)中用到的是clipboard_append。
具體實(shí)現(xiàn)代碼如下:
綜合上述分析、設(shè)計(jì)可見,本文實(shí)現(xiàn)、并完成了基于Android系統(tǒng)的智能終端與PC平臺(tái)的系統(tǒng)剪貼板的同步功能。當(dāng)安裝有該研發(fā)軟件的Android設(shè)備與PC設(shè)備在同一局域網(wǎng)內(nèi)運(yùn)行,通過建立Socket連接后,就可以獲取相互之間剪貼板數(shù)據(jù)的實(shí)時(shí)同步效果了。
當(dāng)然,也需看到,文中研發(fā)程序的功能還未臻完善,在后續(xù)功能拓延中,可以將Android端的手工輸入IP地址以及連接端口的過程優(yōu)化為自動(dòng)掃描服務(wù)器端,即當(dāng)服務(wù)器開放服務(wù)端口,智能終端在掃描到端口后,就可以自動(dòng)提示,并進(jìn)行配對(duì)連接。另外,Socket功能非常強(qiáng)大,在實(shí)際使用中,不僅可以將其用來進(jìn)行簡單文本的傳輸,也可以進(jìn)行各類文件的傳輸,如此即會(huì)使得智能終端與PC平臺(tái)端的數(shù)據(jù)交換趨于更為靈活和豐富。
[1]李現(xiàn)凡,高建榮.基于Socket編程接口的局域網(wǎng)即時(shí)通信系統(tǒng)的開發(fā)實(shí)現(xiàn)[J].常州輕工職業(yè)技術(shù)學(xué)院學(xué)報(bào),2006(4):14-18.
[2]宋瑾.基于ProtocolBuffer協(xié)議的服務(wù)端-客戶端通信[J].電腦編程技巧與維護(hù),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
全國教育信息技術(shù)研究2015年度青年專項(xiàng)課題(156242691)。
朱亞林(1982-),男,碩士,講師,主要研究方向:計(jì)算機(jī)應(yīng)用技術(shù)、信息技術(shù)。