編輯:關於Android編程
主要功能為手機與遠程服務器進行16進制的數據收發,TCPControl類實現了16進制的數據收發功能,其中發送函數設置為每次發送4字節數據,服務器發來的數據在手機上會以Toast的形式顯示出來。
PS:附件中包含TCP調試助手,使用時將調試助手設置為TCP服務器,並勾選發送與接收欄中的16進制收發的選擇項
應用:
1.用戶在IP和PORT編輯框中對應值,點擊Set按鈕,完成服務器參數設置。
2.單擊手機上的SendTest按鈕,手機將想服務器發送數據。
系統代碼執行流程:
1.MainActivity中定義靜態String變量IP和靜態int變量PORT
2.設置Handler,該Handler用於將接收到的來自服務器的數據顯示在手機上
3.在OnCreate函數中獲取btnSet和btnTest控件,分別設置監聽器:btnSet用於設置IP和PORT,btnTest用於向服務器發送16進制的測試數據“6666”
4.在OnCreate函數中創建新線程,該線程用於監聽來自服務器的數據,每當收到來自服務器的數據時,會向Handler發送消息,Handler收到消息後會在手機界面上顯示。之後線程給服務器返回消息0000,循環
TCPControl類解析:
code:
package com.example.tcptest;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
public class TCPControl {
static Socket s = null;
static DataOutputStream dout = null;
static DataInputStream din = null;
static String backCMD = null;
static public int recvCMD() throws Exception {
if (s == null)
s = new Socket(MainActivity.IP, MainActivity.PORT);
if (dout == null)
dout = new DataOutputStream(s.getOutputStream());
if (din == null)
din = new DataInputStream(s.getInputStream());
Thread.sleep(50, 0);
for (int i = 0; i < 10; i++) {
if (din.available() > 0) {
/*
客戶端非16進制發送
byte[] buffer = new byte[din.available()];
System.out.println(din.available());
din.read(buffer);
backCMD = Msg from peer: + new String(buffer);
*/
int backLength = din.available();
char[] buffer = new char[backLength];
for(int j = 0 ; j < backLength ; ++j)
{
buffer[j] = (char) din.readByte();
buffer[j] = (char) (buffer[j] + '0');
}
backCMD = new String(buffer);
return 1;
} else {
Thread.sleep(500, 0);
return 0;
}
};
return 0;
}
static public void sendCMD(final String cmd) {
try {
if (s == null)
s = new Socket(MainActivity.IP, MainActivity.PORT);
if (dout == null)
dout = new DataOutputStream(s.getOutputStream());
if (din == null)
din = new DataInputStream(s.getInputStream());
Thread.sleep(50, 0); // 實際中剛連上後發數據需要一定延時 確保雙方鏈接初始化完成
char[] temp = new char[4];
for (int i = 0; i < cmd.length(); ++i) {
temp[i] = (char) (cmd.charAt(i) - '0');
}
String strTemp = new String(temp);
dout.writeBytes(strTemp);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
TCPControl類包含發送和接收兩個函數
發送:
用戶向服務器發送消息時調用該函數,該函數功能為首先判斷套接字是否為空,若為空則根據用戶設置的IP和PORT新建一個套接字,之後利用該套接字建立數據收發流,在將要發送的消息cmd轉為16進制後利用發送流的writeBytes函數將消息發送至服務器
接收:
首先判斷套接字是否為空,若為空則根據用戶設置的IP和PORT新建一個套接字,之後利用該套接字建立數據收發流,判斷接收流是否收到數據,若收到則將數據轉為16進制並返回1,MainActivity中的檢測線程若發現接收函數返回值為1,則調用Handler將消息顯示出來。若為接收到消息,則會返回0。在該過程中MainActivity的線程會一直調用接收函數,查詢服務器是否有消息發送至手機。
Android通過應用程序創建快捷方式的方法
本文實例講述了Android通過應用程序創建快捷方式的方法。分享給大家供大家參考。具體如下:Android 快捷方式是桌面最基本的組件。它用於直接啟動某一應用程序的某個組
android實現獲取正在運行的應用程序
因為在framework中想添加這個功能,所以寫了個appliction來實現一下獲取正在運行的應用程序: 還是先看圖吧: 這個app主要是簡單的實現了獲取非系統的應用程
使用AndroidStudio上傳忽略文件至SVN Server的解決辦法
在同組項目進行共享時,容易把本地的配置文件比如*.iml等文件上傳至共享服務器,這樣會對隊友造成巨大的麻煩,為了解決這個問題,可以使用下面方法解決,下面以上傳到服務器的a
Android ProgressBar進度條使用詳解
ProgressBar進度條,分為旋轉進度條和水平進度條,進度條的樣式根據需要自定義,之前一直不明白進度條如何在實際項目中使用,網上演示進度條的案例大多都是通過Butto