前陣子研究短信竊聽器的時候,碰到一個問題,需要手機和電腦PC之間進行通信,互相傳輸數據,之間碰到的問題寫出來,方便大家共享,減少查找資料的時間。
首先,有關網絡的操作,沒有用線程,導致出現網絡操作報錯:android.os.NetworkOnMainThreadException,android 版本不允許在主線程中進行網絡訪問,需要將網絡操作單獨放到一個線程中。
new Thread(){
public void run(){
//在此執行網絡操作代碼
}
}.start();
客戶端代碼如下:
new Thread(){
public void run(){
System.out.println("before執行連接操作");
Socket s = null;
try {
s = new Socket("192.168.1.101", 30000);
System.out.println("執行連接操作");
PrintWriter pw;
BufferedReader br;
if(s==null){
Log.e("socket","socket is null");
System.out.println("執行連接操作失敗");
}
else {
//br=new BufferedReader(new OutputStreamWriter(s.getOutputStream()),true);
//pw = new PrintWriter(s.getOutputStream());
pw = new PrintWriter( new BufferedWriter( new OutputStreamWriter(s.getOutputStream())),true);
if(pw!=null){
/*String str="aaaaaaaaa";
pw.println(str);*/
pw.println(sb.toString());
pw.flush();
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
服務器端代碼如下:
public class ServerSocketClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("服務器啓動。。。");
ServerSocket ss;
try {
ss = new ServerSocket(30000);
while(true){
Socket s = ss.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
String str;
//BufferedWriter bw = new BufferedWriter(new FileWriter("D:/11.txt"));
while ((str = in.readLine()) != null) {
System.out.println(str);
// bw.write(str);
// bw.newLine();
}
// bw.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
服務器不停的接收來自客戶端發送過來的數據,並進行顯示。同時,客戶端需要具有網絡訪問權限。