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改变了。

猜你喜欢

转载自blog.csdn.net/weixin_43732570/article/details/86618057