android的app作為服務(wù)端首先其實(shí)要考慮鄙啵活的問(wèn)題江咳,但是這個(gè)暫不考慮逢净,程序掛了就通訊不上了,再重新打開(kāi)就是了,經(jīng)過(guò)測(cè)試爹土,在啟動(dòng)server之后讓app進(jìn)入后臺(tái)甥雕,程序還是可以存活幾個(gè)小時(shí)的(沒(méi)有測(cè)試更長(zhǎng)的時(shí)間,注意胀茵,這是在不開(kāi)其他app的情況下脯燃,在開(kāi)其他app的情況下有時(shí)進(jìn)程會(huì)被kill)坯约。
這里的通訊主要是在電腦端通過(guò)curl發(fā)送命令(url),然后android端處理數(shù)據(jù)并返回結(jié)果。
curl是利用URL語(yǔ)法在命令行方式下工作的開(kāi)源文件傳輸工具引几。
這里我下載的是window下可執(zhí)行程序curl泳赋,是在一個(gè)人分享到網(wǎng)盤(pán)的裳仆。在官網(wǎng)我沒(méi)有找到可執(zhí)行的curl敲才,只找到了源碼(要編譯的)。雖然下面有人家的window端的下載鏈接挪拟,但是我之前沒(méi)有找到(后面終于找到了)挨务。
進(jìn)這個(gè)網(wǎng)站
https://curl.haxx.se/download.html
一直往下拖。下這個(gè)玉组。
我是win7? 64位谎柄,因此使用I386下的curl.exe工具。
cmd進(jìn)入控制臺(tái)惯雳,然后通過(guò)cd命令進(jìn)入到curl.exe所在的目錄朝巫。
進(jìn)入到該目錄后,執(zhí)行curl --help測(cè)試石景。
出現(xiàn)這些信息就表示curl可用劈猿。
試試輸入這個(gè),看是否能正常通訊潮孽。
curl https://www.baidu.com/
至此揪荣,curl可用,下面開(kāi)始設(shè)置服務(wù)端往史。
git上有一些開(kāi)源庫(kù)可以用Nanohttpd仗颈、AndServer。
我之前用的Nanohttpd好像有點(diǎn)問(wèn)題后來(lái)就棄用了(應(yīng)該是我的鍋椎例。不過(guò)我還是感覺(jué)這個(gè)是用于java的我挨决,因?yàn)槲矣浀眠\(yùn)行sample響應(yīng)ok,但是上傳文件好像有點(diǎn)問(wèn)題订歪,缺乏某些類(lèi))脖祈,然后就用了AndServer。
AndServer地址:
https://github.com/yanzhenjie/AndServer
通過(guò)運(yùn)行sample可以大致了解通訊的過(guò)程刷晋。
至于具體怎么添加到自己的項(xiàng)目中撒犀,在gradle中添加依賴福压,然后將sample中的代碼copy到自己的項(xiàng)目中即可掏秩。
compile'com.yanzhenjie:andserver:1.0.3'
app運(yùn)行之后或舞,打開(kāi)server,然后就可以進(jìn)行通訊了蒙幻。
比如映凳,上傳,命令如下:
curl -F "filename=@你好.txt" http://192.168.3.169:8080/upload
192.168.3.169是android設(shè)備的ip地址邮破,8080是端口號(hào)诈豌。(本質(zhì)是socket通訊?這方面我沒(méi)有深入了解抒和,http通訊矫渔?)
在測(cè)試上傳功能過(guò)程中發(fā)現(xiàn)一個(gè)問(wèn)題,包含中文字符的文件名傳輸?shù)絘ndroid端之后顯示的是亂碼(英文則不會(huì)出現(xiàn)此問(wèn)題)摧莽。
上傳文件默認(rèn)保存在sdcard目錄下庙洼。
解決方法:
在RequestUploadHandler類(lèi)中設(shè)置傳輸?shù)母袷剑唧w代碼:
fileUpload.setHeaderEncoding("gbk");
然后進(jìn)行格式轉(zhuǎn)換之后才能得到正確的中文字镊辕。
String s =newString(fileItem.getName().getBytes(),"UTF-8");
上傳成功后會(huì)返回ok油够。
格式不一致然后導(dǎo)致了亂碼(具體原因待分析,這是我偶然嘗試上傳gbk格式的中文然后發(fā)現(xiàn)此時(shí)android設(shè)備中的文件名沒(méi)有亂碼發(fā)現(xiàn)的)征懈。
關(guān)于登錄石咬,demo中默認(rèn)賬號(hào)和密碼為123。
if("123".equals(userName) &&"123".equals(password))?
因此卖哎,發(fā)送命令鬼悠。
curl -d "userName=123&password=123" http://192.168.3.169:8080/login
參考鏈接:
windows(64位)下使用curl命令
http://blog.csdn.net/wangchao729251283/article/details/54628826
Curl windows下載地址
http://blog.csdn.net/hongweigg/article/details/51728220