當前位置:首頁 » 安卓系統 » androidwifisocket

androidwifisocket

發布時間: 2022-12-19 16:41:39

❶ android socket 異常退出問題

你沒有用線程!!!
--------------------
客戶Socket
產生Socket對象,客戶端連接服務端的埠,這也需要放到線程中,由newSocket()子程序負責; 讀Socket得到的字元串通過消息傳給主程序協助顯示,這由clientRead(Socket sk)子程序負責,這兩個耗時性子程序都要放到子線程才能工作, clientRead(final String ip,final int port)產生即時子線程供調用。

Socket newSocket(String ip,int port)
{ Socket sk=null;
try
{ sk=new Socket(ip,port); // 連接服務端,返回Socket
}
catch(Exception e)
{
}
return(sk);
}
void clientRead(Socket sk)
{ // 客戶端讀Socket
DataInputStream inf;
try
{ inf=new DataInputStream(sk.getInputStream());
while(sk.isConnected() && !sk.isClosed())
{ String s=inf.readUTF();
if (s.length()>0)
{ Message msg=cHandler.obtainMessage(2,s);
cHandler.sendMessage(msg);
}
}
}
catch(Exception e)
{
}
}
void clientRead(final String ip,final int port)
{ // 子線程中客戶端讀Socket
new Thread(new Runnable()
{ @Override
public void run()
{ Socket sk=newSocket(ip,port);
clientSocket=sk;
if (sk!=null)
clientRead(sk);
}
}).start();
}
一次成功的連接,在服務端與客戶端各自都會產生一個Socket對象,並包含了許多方法與屬性,對象中可以知道對方的IP地址與埠,還有判斷連接狀態的函數,如Socket.isConected()和Socket.isClosed(),但這只能判斷自已的Socket是否已連接與斷開,但無法判斷對方的是否斷開狀態,解決的辦法是服務端向對方發「心跳包」或自行在對話協議中向對方發應答命令,以是否響應超時作為判斷對方是否斷開的依據。

❷ PC伺服器端和android手機客戶端socket通信問題

1. PC伺服器啟用ServerSocket
兩個通信實體在建立虛擬鏈路之前,需要有一方先准備好,主動接受來自其他通信實體的連接請求。
使用ServerSocket對象監聽來自客戶端的Socket連接。
//創建ServerSocket對象

ServerSocket ss = new ServerSocket(30000);
//監聽來自客戶端的請求
while(true){
Socket s = ss.accept();

}

如果沒有連接,則將一直處於等待狀態。當接收到連接請求後,獲取消息到輸入流,並保存到文件。
//接收客戶端消息

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信息並發送給伺服器端,然後將結果保存。
WifiManager wifiManager=(WifiManager) getSystemService(WIFI_SERVICE);
wifiManager.startScan();
mWifiList = wifiManager.getScanResults();

由WifiManager說明可知,它可以用於處理已配置的網路,當前連接的網路及AP信息的掃描等情況。
向伺服器發送消息:
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用wifi實現socket需要加許可權嗎程序里需要額外設置嗎

Android應用,只要調用了系統的東西,都需要聲明許可權,只要應用程序連接網路,注意,不管是互聯網,還是區域網,都是算訪問了網路資源了。wifi實現socket需要增加以下許可權:

  1. 網路連接的許可權<uses-permission android:name="android.permission.INTERNET" />。

  2. Wifi訪問許可權<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> 。

  3. 網路狀態訪問許可權<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 。

❹ 如何用socket實現android手機與手機之間的通信

參考一般的JAVA的socket編程,如果通過手機網路,就不要使用UDP即可。

❺ android socket請求數據怎麼抓包

從網路上面搜索到的資料看,要抓取手機中app的網路包有下面幾種方式:
(1).將tcpmp移植到Android平台,然後在命令行下啟動tcpmp進行抓包。Tcpmp程序實際上可以看作是wireshark的命令行版本,將該程序移植到Android平台直接抓包,這是一種最直接的抓包方式,然後將抓獲的數據包文件,從手機傳到windows系統上用wireshark打開進行分析,這種方式貌似不能用於蘋果手機。
(2).使用fiddler,在windows系統上打開fiddler軟體,該軟體會將我們的電腦變成一個代理,然後在手機上設置wifi網路,將代理指定為開啟fiddler的那台電腦,並且埠設置為fiddler偵聽的8888埠,這時候使用手機訪問的數據,就會通過該代理,在fiddler中就可以看到http的數據包。這種方法我試了半天怎麼都看不到數據包,不知道哪裡出問題了,根據原理,這種方式支持可以通過代理訪問網路的手機。所以從原理上說是支持Android和蘋果手機的。
(3).通過各種方式在pc電腦上建立wifi熱點,然後使用wireshark在pc電腦上監視該wifi熱點,通過手機連接該熱點訪問網路。這樣wireshark會獲取所有流經該熱點的數據包這種方式適用於所有能夠無線訪問的手機,也就是說所有的Android和蘋果手機。
那麼如何在pc電腦上建立wifi熱點呢,有這么幾種辦法:
(1).Win7電腦經過設置,可以將無線網卡設置為wifi熱點,這種方法我以前用過,可以成功,但是步驟繁瑣,而且不一定能夠成功,其他的windows系統估計就沒戲了。
(2).使用軟體自動建立wifi熱點,不需要自己手工配置,這樣的軟體有Connectify Hotspot,獵豹免費wifi,360免費wifi軟體,這幾個軟體我都使用過,比較好用,這種方式同樣也只能針對有無線網卡的筆記本電腦,原理也是將筆記本電腦上的無線網卡建立熱點了,只不過是軟體自動的,不需要人工設置,比方法1要方便。
注意:經過實驗發現,手機連接這種方式建立的熱點,所發送的數據,用wireshark去抓包,需要捕獲電腦上本身聯網的那個「網路連接」,例如我的筆記本上面有一個「本地連接」,該連接是使用有線網路的。我用獵豹免費wifi軟體建立一個熱點之後,我的電腦上多出一個「無線網路連接3」,可以看到該「無線網路連接3」是獵豹生成的,但是我抓包的時候,wireshark需要捕獲「本地連接」上的包,也就是我的手機訪問的數據實際上還是使用的「本地連接」,通信IP也是「本地連接」上的IP地址,而在手機的wifi連接設置中看到的ip地址,在我抓的包中也搜不到,也就是說手機通過該熱點訪問網路,實際上還是使用的「本地連接」的IP地址,至於是什麼原理,我目前也不太清楚。但是下面要說的隨身wifi硬體則與此不同,隨身wifi是建立了網卡。
(3).使用隨身wifi硬體。這種也是很方便的方法,而且比較穩定,對筆記本電腦和台式機都可以使用。我之前買了一個360的隨身wifi(不是打廣告,本人對360公司不感冒,但是他的隨身wifi做的確實還可以,同事中有買小米wifi的,不太穩定)。只要在360的官網上下載驅動,直接插上隨身wifi就可以使用,我推薦使用這種方法。
如果你用的是筆記本電腦可以使用方法2,如果是台式機器可以使用方法3。

❻ android上怎麼通過wifi接收串口數據

可以先測試wifi模塊的是否調試好, 使用串口大師,進行測試。 首先:確信串口Wifi模塊匹配好?尤其是地址和埠。 使用遠嘉科技的串口Wifi模塊TLN13UA06配置軟體與單片機連接,成功時在軟體界面提示埠配置成功。 其次:串口Wifi模塊傳輸數據量是多少?有沒有超過串口口的門限?硬體流控有沒有打開?沒有硬體流控的情況下,軟體流控有沒有做好? 自動組幀觸發長度:是指要達到門限長度,才會發送,否則,要等到觸發時間。如果傳輸字元串夠長,達到組幀觸發長度了;否則沒有的話,需要等到了觸發時間。 工作在自動模式下,模塊支持用戶可設置的自動組幀觸發長度和觸發的時間。同時此模式下,模塊串口傳輸支持硬體流控方式,提供標準的RTS/CTS 信號,手冊說明用戶在進行大數據量傳輸時啟用硬體流控功能,這樣可以充分保證數據的可靠傳輸,對於不需要流控功能的應用場合,用戶只需把RTS/CTS 引腳懸空即可。 最後:嘗試著用AirPeek抓一下包。看看數據發送是否成功。

熱點內容
雜訊的危害和控制設計腳本 發布:2025-05-17 08:22:29 瀏覽:472
esr演算法 發布:2025-05-17 08:16:09 瀏覽:194
安卓手機怎麼用擬我表情 發布:2025-05-17 08:10:13 瀏覽:918
給U盤安裝kalilinux 發布:2025-05-17 08:07:26 瀏覽:249
sql提示存儲過程 發布:2025-05-17 07:35:58 瀏覽:743
qq里的互動訪問 發布:2025-05-17 07:26:53 瀏覽:665
口語易賬號密碼發送到哪裡 發布:2025-05-17 07:26:52 瀏覽:62
核桃編程幼兒 發布:2025-05-17 07:26:50 瀏覽:787
2台伺服器集群搭建 發布:2025-05-17 07:18:57 瀏覽:185
北方園林配置植物有哪些 發布:2025-05-17 07:18:20 瀏覽:544