Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Socket Android手機客戶端與PC服務端局域網內聯測試

Socket Android手機客戶端與PC服務端局域網內聯測試

編輯:關於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();

上面代碼是 PC 服務端的名為 IQServer 類代碼段,ServerSocket 創建對象 Ssocket=new ServerSocket(4632);設置監

聽端口,監聽來自此端口的 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


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved