1. 程式人生 > >Android客戶端與PC伺服器實現Socket通訊(wifi)

Android客戶端與PC伺服器實現Socket通訊(wifi)

本文介紹Android終端持續掃描AP資訊併發送給伺服器端的實現。首先基於TCP協議在Android終端和PC兩端之間形成網路虛擬鏈路。使用ServerSocket建立TCP伺服器端,然後在Android客戶端使用Socket的構造器來連線伺服器。其中Android終端通過WIFI連線和PC處於同一區域網。

1. PC伺服器啟用ServerSocket

兩個通訊實體在建立虛擬鏈路之前,需要有一方先準備好,主動接受來自其他通訊實體的連線請求。

使用ServerSocket物件監聽來自客戶端的Socket連線

複製程式碼
//建立ServerSocket物件
//by wayne from www.cnblog.com/dwayne/
ServerSocket ss = new ServerSocket(30000); //監聽來自客戶端的請求 while(true){ Socket s = ss.accept(); … }
複製程式碼

如果沒有連線,則將一直處於等待狀態。

當接收到連線請求後,獲取訊息到輸入流,並儲存到檔案。

複製程式碼
//接收客戶端訊息
//by wayne from www.cnblog.com/dwayne/

BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); String str; BufferedWriter bw
= new BufferedWriter(new FileWriter("D:/ApInfo"+ (i++) +".txt")); while ((str = in.readLine()) != null) { System.out.println(str); bw.write(str); bw.newLine(); }
複製程式碼

2. Android終端使用Socket通訊

客戶端使用Socket的構造器連線伺服器,指定伺服器IP和埠號就可以了。

Socket s = new Socket(“192.168.1.100”, 30000);

這樣伺服器端的accept()方法就得到響應,從而向下執行,伺服器端和客戶端就形成了一對互相連線的Socket。再進行通訊時就沒有伺服器和客戶端之分了,都是通過輸入輸出流進行通訊。

 詳細步驟

採用Handler和TimerTask來定時掃描AP資訊併發送給伺服器端。

TimerTask規定了到達指定的時間所要進行的任務。

複製程式碼
TimerTask task = new TimerTask(){

    public void run() {
        Message message = new Message();
        message.what = 1;
        handler.sendMessage(message);
    }   
       
}; 
複製程式碼

handler傳遞message內容:

複製程式碼
Handler handler = new Handler(){

    public void handleMessage(Message msg) {
        switch (msg.what) {
        case 1:                
            // 執行定時器時間到了之後由handler傳遞的任務
            break;
        }
        super.handleMessage(msg);
    }

};
複製程式碼

因為需要持續執行掃描任務,所以啟用新執行緒執行定時任務

複製程式碼
//啟動單獨執行緒定時向伺服器傳送AP資訊
//by wayne from www.cnblogs.com/dwayne
new Thread(){ @Override public void run() { // TODO Auto-generated method stub timer.schedule(task, 2000,10000); //在2秒後每10秒執行一次定時器中的方法 } }.start();
複製程式碼

接下來掃描AP資訊併發送給伺服器端,然後將結果儲存。

WifiManager wifiManager=(WifiManager) getSystemService(WIFI_SERVICE);
wifiManager.startScan();
mWifiList = wifiManager.getScanResults();

由WifiManager說明可知,它可以用於處理已配置的網路,當前連線的網路及AP資訊的掃描等情況。

This class provides the primary API for managing all aspects of Wi-Fi connectivity. Get an instance of this class by calling Context.getSystemService(Context.WIFI_SERVICE). It deals with several categories of items:

  • The list of configured networks. The list can be viewed and updated, and attributes of individual entries can be modified.
  • The currently active Wi-Fi network, if any. Connectivity can be established or torn down, and dynamic information about the state of the network can be queried.
  • Results of access point scans, containing enough information to make decisions about what access point to connect to.
  • It defines the names of various Intent actions that are broadcast upon any sort of change in Wi-Fi state. 

向伺服器傳送訊息:

socket = new Socket("192.168.1.211",30000);
//向伺服器端傳送訊息
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);        
out.println(message);

其中message為獲取的AP資訊

測試收到的資訊格式為:

SSID: ICIS_LAB, BSSID: 1c:af:f7:9a:65:e4, capabilities: [WPA-PSK-TKIP+CCMP], level: -80, frequency: 2437

相關推薦

Android客戶PC伺服器實現Socket通訊(wifi)

本文介紹Android終端持續掃描AP資訊併發送給伺服器端的實現。首先基於TCP協議在Android終端和PC兩端之間形成網路虛擬鏈路。使用ServerSocket建立TCP伺服器端,然後在Android客戶端使用Socket的構造器來連線伺服器。其中Android終端通過WIFI連線和PC處於同一區域網

Android客戶伺服器進行網路通訊

多寫技術文件,多寫技術文件,多寫技術文件,重要的事情說三遍...... ---------------------------------------------------------------------------------------------------

實現Android客戶Eclipse伺服器基於Okthhp簡單通訊

最近在重溫知識,所以藉此機會也想把自己寫的一些心得寫出來供大家分享,寫的有誤或者不好的地方望大家見諒,好了,廢話少說,直接進入正題,下面給大家介紹的就是基於目前主流網路通訊框架的okhttp實現的Android與Eclipse通訊。首先說明:我用的Android客戶端是And

Android客戶Tomcat伺服器通訊實現登入驗證

一.功能描述   在Android客戶端實現登入介面,當將使用者名稱和密碼填入文字框並點選登入按鈕時,將認證資訊傳送至Tomcat伺服器進行認證,若使用者名稱和密碼匹配,則Android客戶端提示登入成功,否則提示登陸失敗。 二.開發環境 Android客戶端:Andro

Android客戶PC進行Socket通訊

伺服器端程式碼: import java.io.IOException; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Si

Android客戶java伺服器Socket連線

開發十年,就只剩下這套架構體系了! >>>   

Android客戶本地服務器Socket通信

msg 初始化 ips print rmi listener 個數 myeclips 開啟 Android客戶端與本地服務器Socket通信 Socket服務器運行結果圖?? 一.客戶端和服務器端的選擇: 客戶端是我們手機端,關於服務器端,只要安裝了JDK,自然就擁有通

XMPP學習——Android客戶openfire伺服器單雙向TLS通訊

本文從TLS安全傳輸層協議的簡單流程、如何生成自簽名CA證書、自頒發伺服器&客戶端證書、配置openfire伺服器安全連線去描述如何建立一個使用TLS加密的XMPP聊天通道。 這裡的smack版本是V4.2.3,openfire伺服器版本也是V4.2.3

android客戶+JAVA WEB伺服器實現json資料解析

import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.But

android客戶php伺服器的json資料簡單互動(二)

上一篇文章講的是最簡單的通過接送的格式完成android客戶端與php伺服器互動,也就是通過JSONObject物件來進行互動。         從上篇的文章程式碼就可以看出來,如果php陣列僅僅採用鍵值對的方式進行儲存,通過很簡單的方式轉換為json格式,之後在andr

android客戶servlet伺服器互動簡單示例

前段時間需要寫一個能雙向解析XML的程式,但是客戶端只能從伺服器裡讀,但是死活傳不上去,倒騰了兩天終於搞好了。 下面直接貼示例程式碼,不明白的話再問吧。 這是android客戶端,記得得在AndroidManifest.xml檔案裡新增INTENET許可權。 publ

Android客戶Java tomcat之間HTTPS通訊

文中涉及到https認證和post傳參。        不使用SSL(Secure Sockets Layer)/TLS的HTTP通訊就是不加密的通訊,所有資訊都已明文傳播,容易被竊取、篡改或冒充。SSL/TLS協議的基本思路是採用公鑰加密法:客戶端先向伺服器端索要公鑰,

android中利用Socket實現手機客戶PC進行通訊

伺服器端: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; impor

android客戶部署到tomcat的servlet伺服器之間實現http通訊

博主目前小白,為了完成這個踩到不少地雷,在此處記錄下,可能錯誤忘記了,以後想起來再更新。 伺服器端: public class Servlet extends HttpServlet { @Override protected void doPo

Unity C#伺服器 實現Socket的UDP通訊(多客戶

前言 上一篇簡單的介紹了下Unity客戶端和伺服器的Socket通訊,但是還不能實現多個客戶端與伺服器的通訊,所以今天在這邊把前面的工程完善一下(使用的是上篇講到的UdpClient類來實現),實現多個客戶端與伺服器的udp通訊。效果圖如下,兩個客戶端可以向伺服器傳送訊息,

Mina長連線框架實現Android客戶伺服器通訊

一、概述         Apache Mina Server 是一個網路通訊應用框架,也就是說,它主要是對基於TCP/IP、UDP/IP協議棧的通訊框架(當然,也可以提供JAVA 物件的序列化服務、虛擬機器管道通訊服務等),Mina 可以幫助我們快速開發高效能、高擴充套件

android客戶伺服器互動 如何保持session

最近在開發專案的過程中,遇到android與web伺服器要在同一session下通訊的問題。 在解決問題前先回顧下Session與Cookie: Cookie和Session都為了用來儲存狀態資訊,都是儲存客戶端狀態的機制,它們都是為了解決HTTP無狀態的問題而所做

Android 客戶伺服器進行資料互動(一、登入伺服器

概要 安卓APP要實現很多功能(比如登入註冊、發表評論等)時都必須要使用到網路資料互動。所以在學習了這部分內容後,就將其以最常見的登入過程為例整理出來,也方便跟我一樣的新手能迅速學習上手。 預期效果圖如下,輸入手機號和密碼,點選Login按鈕,上傳資料到伺

Android客戶伺服器的json資料互動(很詳細)

      Android客戶端與伺服器端的json資料互動,主要是通過json形式的資料互動,就是json的寫入和解析。  先看效果圖,我最討厭講東西,一個圖沒有的。 算了,看來我不是寫部落格的材料,寫不下去了,要排版之類的麻煩,大家還是直接去下載原始碼,裡面有大量的注

Android客戶伺服器進行通訊

在Android開發中,經常使用到與後臺進行互動,後臺人員給你一個URL,Android使用HttpURLConnection得到後臺返回的資料。這些任務是開發中經常遇到的。這裡,我們自己搭建一個簡易的後臺,來實現Android客戶端與後臺的互動。 首先,後臺