文章目錄
展示一下效果圖:
1.創建一個Android的工程,再創建一個java的工程
2.設計手機App通信的樣式fragment_main.xml
3.設計PC端通信的樣式
最最最重要!!!
不論是你打算實現PC和手機的基本通信還是你在遇到bug的時候看到我這篇文章,都要注意我下面說的,真的是十分坑爹
1.首先在Android項目中加入連接網絡的權限,Manifest.xml文件中添加
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- udp報文權限-->
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
2.確保你的手機和電腦都連上了WIFI
3.確保你的電腦防火牆已經關閉(否則你的手機給電腦通信電腦端是無法顯示的)
一、手機發送信息到PC端
手機文件思路:
1.獲取發送目標的ip,並設置一個端口
2.書寫一個發送信息的函數SendMsg()
PC文件:
1.設置一個接收文件的端口(要和上面的保持一致)
2.書寫一個接收信息的函數ReceiveMsg()
詳細設計:(儘量多使用輸出語句,這樣方便檢查錯誤)
Log.i("2","發送函數調用成功。。。");
// 1.獲取輸入框內容
String str = "Phone:"+ editMsg.getText().toString().trim();//trim()函數是爲了去除不必要的空格或符號
// 2.轉換成字節傳輸
byte[] data =str.getBytes("utf-8");//這裏可以兼容中文
// 3.將信息打包
DatagramSocket socket = new DatagramSocket(9999);//創建服務器的socket
DatagramPacket dp = new DatagramPacket(data, data.length,InetAddress.getByName("192.168.31.6"),9999);//參數1.數據,2.數據長度 3.電腦方的IP,4.端口
socket.send(dp);//將打包的數據發送出去
Log.i("3","發送信息成功!");
socket.close();//關閉服務器
當然,這樣設計,在檢測的時候發現並不能傳輸給電腦,有異常,這裏需要注意Android有點特殊它的應用比較多,需要使用多線程,
public void SendMsg() throws IOException{
Log.i("2","發送函數調用成功。。。");
// 1.獲取輸入框內容
String str = "Phone:"+ editMsg.getText().toString().trim();//trim()函數是爲了去除不必要的空格或符號
// 2.轉換成字節傳輸
final byte[] data =str.getBytes("utf-8");//這裏可以兼容中文
new Thread(new Runnable() {
public void run() {
try{
// 3.將信息打包
DatagramSocket socket = new DatagramSocket(9999);//創建服務器的socket
DatagramPacket dp = new DatagramPacket(data, data.length,InetAddress.getByName("192.168.31.6"),9999);//參數1.數據,2.數據長度 3.電腦方的IP,4.端口
socket.send(dp);//將打包的數據發送出去
Log.i("3","發送信息成功!");
socket.close();//關閉服務器
}catch(Exception e){
e.printStackTrace();
}
}
}).start();
下面是PC端的接收函數receiveMsg()
public static void receiveMsg() throws IOException{
System.out.println("等待接收消息。。。");
// 1.創建端口
DatagramSocket socket = new DatagramSocket(9999);
// 2.將信息轉換成字節流接收
byte[] data = new byte[1024];
//數據打包
DatagramPacket dp = new DatagramPacket(data, data.length);
socket.receive(dp);//接收數據包
// 3.將數據轉換成字符串
String s = new String(dp.getData(),dp.getOffset(),dp.getLength());
// 4.將數據顯示出來
textShow.setText(s);
}
這樣,基本的手機發送信息,電腦接收的功能已經實現了,當要實現電腦發送,手機接收,只要Android工程建立一個接收函數,和receiveMsg()類似,但是要注意IP改變了。