編輯:關於Android編程
Socket Android手機客戶端與PC服務端局域網內聯測試,筆者采用的是 PC服務器,Android平板客戶端 ,PC模擬器客戶端,
前段時間為了加深對Socket通信的印象和知識的深度掌握,我模仿了QQ的一些元素,也借鑒了其他牛人的一些源碼思想,寫了
一個 叫 IQ 的 Android 聊天軟件,該軟件大致由 Android客戶端、JAVA pc服務端、mysql數據庫組成,客戶端和服務端都
比較多的用到了讀寫的IO流,SCOKET,線程等,這篇博客主要給大家介紹測試環境,不講源碼實現方式,也就是怎麼使用寫好
的程序來應用和測試,我看過很多博客,在這方面說的很笼統,這樣很不利於初學者的學習,所以我今天會很詳細的講一遍,
有興趣學習Socket的可以跟著一起來,不說廢話了,看博客吧
首先我們要只知道,在一個局域網內的IP是可以互相訪問的,也就是同一個網段內,這樣說可能很難理解,我上一些核心代碼
結合代碼演示給大家看:
public class IQserver { public IQserver(){ ServerSocket Ssocket = null; try { Ssocket=new ServerSocket(4632); System.out.println("Server is Loging...... "+new Date()); while(true){ //accept()是一個阻塞函數,所謂阻塞性方法 //就是說該方法被調用後將等待客戶的請求,直到有一個客戶啟動並請求連接到相同的端口, //然後accept()返回一個對應於客戶的Socket Socket socket = Ssocket.accept();
聽端口,監聽來自此端口的 SOCKET
public class IQClient { private Context context; public Socket socket; public IQClient(Context context){ this.context=context; } // 登錄 public boolean sendLoginInfo(Object obj){ boolean b=false; try { socket=new Socket(); try{ //host:為服務器的IP地址 port:為服務器的端口號 3000ms為連接延遲設置 socket.connect(new InetSocketAddress("10.0.0.2",4632),3000); }catch(SocketTimeoutException e){ //連接服務器超時 return false;
上面代碼段是 客戶端 IQClient 的代碼段,我們可以看到我目前的測試IP是 10.0.0.2,端口4632,延遲3秒,這個測試是
是單一的 PC Android模擬器訪問 本地PC 的IP ,它等於 127.0.0.1,下面開始說重點,我們測試就應該把服務器和客服
端控制在同一網段下,比如:
路由器映射:我們都知道,當我們的設備連接路由器分享的熱點,都會被自動分配一個IP,打個比方路由器的是
192.168.23.1,我用手機連上了路由器的熱點,分配到了一個IP:192.168.23.0~255 第四個字段為不為1的0~255之間的
數字,因為IP地址不能沖突,還有就是端口4632不要與服務器的任何端口沖突,端口盡量設置不為常見的,具體端口查看
cmd命令:x:> netstat -ano
本地服務器自行設置:如果沒有服務器呢,其實我們可以自己弄個局域網,玩過CS的都知道,嘿嘿,通常性能比較好的筆記
本會分出一個熱點,PC的話插上wifi 也可以分享熱點,然後其他玩家只要連接上這個熱點就可以同時一起玩了,下面說說
筆記本分享熱點的命令行,有工具的可以直接分享,不用敲命令,省事兒
筆記本熱點分享CMD 命令:
x:> netsh wlan set hostednetwork mode=allow ssid=熱點帳號 key=密鑰
敲完回車,不用加;號
接著在敲:
x:> netsh wlan start hostednetwork
不加;號,直接回車,如果出現一些異常,或失敗提示
請檢查服務管理,按住田字格鍵(菜單鍵)+R鍵 在運行裡輸入services.msc
找到WLAN這一項,開啟,其他錯誤,請找到WLAN防火牆設置,設置完,重啟PC
接下來就是利用分享出來的熱點,進行局域網測試,以Win7 PC 為案例
比如我現在用我的 win7筆記本分享了一個名為 Fuck 的熱點,它的IP是:192.168.23.1
具體端口查看方法如下(沒網的情況下):
按住田字格鍵(菜單鍵)+R鍵 在運行裡輸入cmd ,執行 ipconfig 不加;號,回車,如下圖 紅框 就是PC服務器熱點IP了
抹掉的是沒有影響,因為這是我測試的,而且並沒有分享熱點,以你自己的為准,只是演示給大家看的
然後就在上面的客戶端 IQClient 的代碼段,把IP替換成 192.168.23.1 就OK了,端口不用修改,然後執行開啟服務器代碼類,<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvc3Ryb25nPjwvcD4KPHA+PHN0cm9uZz48c3Ryb25nPrf+zvHG97+qxvS0+sLrvLC94bn7zbyjujwvc3Ryb25nPjwvc3Ryb25nPjwvcD4KPHA+PHN0cm9uZz48c3Ryb25nPjwvc3Ryb25nPjwvc3Ryb25nPjxwcmUgY2xhc3M9"brush:java;">package engineer.jsp.server.Start;
/**
* @author Engineer-Jsp
* @date 2014.08.18
* IQ 啟動服務類*/
import engineer.jsp.server.Control.IQserver;
public class StartServerSocket {
public static void main(String[] args) {
new IQserver();
}
}
/**
*執行IQ測試,請先執行當前類,如果有需要更新和修改代碼,首先要結束進程,刷新項目,多次運行當前啟動類會拋下面異常
*java.net.BindException: Address already in use: JVM_Bind
*因為它還在PC線程中執行,結束進程的CMD命令:① netstat -ano ② 找到線程所在pid ,CMD命令:taskkill /pid xxxx /f 即可
*然後單機選中項目右鍵刷新,在運行當前類,還需要注意server與client的端口要一致
*/
下圖白色標記部分為服務器開啟之後綁定端口的進程:
接下來你要做的就是把寫好的 客戶端APP 分別安裝在手持設備上,然後連上名為Fuck的熱點,登陸測試帳號,測試帳號來自你的mysql數據
庫,我的測試賬號表如下:
PC 模擬器好友列表:
Android 平板客戶端,PC模擬器客戶端,PC java服務器 ,開始測試:
設備比較爛。。。大伙不要笑啊。。。o(∩_∩)o ,很久以前買的本子了,平板也是
聊天圖,下圖中 賬戶小情緒 可以收到來自 Engineer-Jsp的消息,而Engineer-Jsp收不到小情緒的信息,是因為還有個BUG沒解決呢,因
為主要目的是進行局域網測試,所以這個目前來說不重要,影響不是很大
局域網的測試就到此說完了,有疑問可以留言,大家一起交流和討論,看到第一時間回復,因為平時比較忙
下面說說網域網的應用,我們都知道每次的IP都不是固定的,這就需要域名跟IP進行綁定,然後通過DNS來解析域名得到IP,或者用服務器
固定靜態IP也可以,那就會涉及到訪問權限和安全問題,一般的數據庫有類似於紅白名單這樣的限制,使我們無法獲取賬戶信息,也就是賬
戶無法登錄,那就需要對數據庫就行IP白名單設置,把權限符host設置為%號即可解決,然後在服務器上,用jvm來啟動我們的服務端,用
java命令進行啟動,很多博客有類似的講解,大家可以多查查資料,了解一下
也不知道我講得詳不詳細,反正不懂得就提出來,大家一起討論
源碼下載地址,附帶數據庫:http://download.csdn.net/detail/jspping/8067509
今天來講講自定義單個控件,就拿開關按鈕來講講,相信大家見了非常多這樣的了,先看看效果:我們可以看到一個很常見的開關按鈕,那就來分析分析。首先:這是由兩張圖片構成:①一張為
我們在做類似於個人主頁類應用的時候,可能會遇到這樣的需求,效果如下相信大家應該看明白是什麼效果了,就是隨著列表的滑動,上面的標題欄的透明度會隨之變化。在IOS中,有很多的
檢查更新並下載更新可以說是一個app必備的功能了.既然是必備功能,往往需要考慮很多東西,如下:1,更新方式:一個軟件有更新了,如果是上線了新的功能或修復了某些bug,或者
Android 內置了很多系統級別的廣播。廣播的注冊方式有兩種,一種是代碼注冊,另一種是在AndroidManifest.xml 中注冊。當然,前者稱為動態注冊,後者稱為