• 1.1.1 AndroidStudio的安装
  • 1.1.2 AndroidStudio导入jar
  • 1.1.3 AndroidStudio上传项目到Github
  • 1.2.1 Android使用flutter开发
  • 2.1.1 Android的Service作用和使用方法
  • 2.2.1 Android实现Gestures捕获
  • 2.3.1 Android实现UDP通信
  • 2.3.2 Android实现Socket通信
  • 2.4.1 Android的Handler消息传递
  • 2.5.1 Android Toast详解
  • 2.6.1 Android的Activity跳转
  • 2.7.1 Android使用AccessibilityService
  • 2.8.1 Android实现fargment
  • 2.9.1 Android实现GPS定位,不用SDK
  • 2.10.1 Android获取传感器数据
  • 2.11.1 Android发送通知支持安卓11
  • 2.12.1 Android使用rxjava
  • 2.13.1 Rxjava简单使用
  • 2.14.1 android连接mysql
  • 3.1.1 Android实现网格布局
  • 3.2.1Android实现全局字体
  • 3.3.1ConstraintLayout基础
  • 3.4.1ConstraintLayout提高
  • 3.5.1ConstraintLayout提高-下
  • 4.1.1 Android实现天气下雨效果
  • 4.2.1 Android录制副麦克风的声音
  • 4.2.2 Android通过AudioTrack播放自定义声音 比如正弦波
  • 4.3.1 android实现第一次打开应用的介绍页面
  • 4.4.1 android实现图片压缩
  • 4.5.1 android实现pdf阅读器
  • 4.6.1 Android 获取应用使用情况
  • 4.7.1 android实现插件化
  • 4.8.1 Android实现类似微信的设置界面
  • 4.9.1 android播放60帧动画
  • 4.9.1 android实现一键锁屏
  • 4.10.1 android调用shell
  • 4.11.1 android解析json
  • 4.12.1 Android上传文件用php接收
  • 5.1.1 android使用native c++开发
  • 5.2.1 android运行汇编程序helloworld
  • 5.3.1 android执行二进制文件和class文件

TCP和UDP的不同

上次我们讲的是TCP的socket,他们之间的不同在于,tcp要等待客户端的接入,然后获得 客户端socket然后进行IO操作,udp直接传送数据即可

android udp 多线程 android udp通信_android udp 多线程

 

UDPserver的Main.java

DatagramSocket socket = new DatagramSocket(12345);
                // 2.创建数据报,用于接收客户端发送的数据
                byte[] data = new byte[1024];// 创建字节数组,指定接收的数据包的大小
                DatagramPacket packet = new DatagramPacket(data, data.length);
                System.out.println("****服务器端已经启动,等待客户端发送数据");
                socket.receive(packet);// 此方法在接收到数据报之前会一直阻塞
                // 4.读取数据
                String info = new String(data, 0, packet.getLength());
                System.out.println("我是服务器,客户端说:" + info);

                InetAddress address = packet.getAddress();
                int port = packet.getPort();
                byte[] data2 = "欢迎您!".getBytes();
                // 2.创建数据报,包含响应的数据信息
                DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port);
                // 3.响应客户端
                socket.send(packet2);
                // 4.关闭资源
                socket.close();

Android的MainActivity

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new Thread() {
            @Override
            public void run() {
                try {
                    udpClient();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
    void udpClient() throws IOException {
        InetAddress address = InetAddress.getByName("10.32.108.182");
        int port = 12345;
        byte[] data = "the message you want to send to server".getBytes();
        // 2.创建数据报,包含发送的数据信息
        DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
        // 3.创建DatagramSocket对象
        DatagramSocket socket = new DatagramSocket();
        // 4.向服务器端发送数据报
        socket.send(packet);

        byte[] data2 = new byte[1024];
        DatagramPacket packet2 = new DatagramPacket(data2, data2.length);
        // 2.接收服务器响应的数据
        socket.receive(packet2);
        // 3.读取数据
        String reply = new String(data2, 0, packet2.getLength());
        Log.e("tag","我是客户端,服务器说:" + reply);
        // 4.关闭资源
        socket.close();
    }
}

权限

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />