文章目录
展示一下效果图:
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改变了。