PC與Android的基於UDP的網絡通信

文章目錄


展示一下效果圖:
在這裏插入圖片描述
在這裏插入圖片描述
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改變了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章