android studio虚拟机中一个程序模拟udp通信

java 复制代码
package com.example.transport1;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    EditText commandEditText;
    LinearLayout outputLayout;
    Button runButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        commandEditText = (EditText) findViewById(R.id.command);
        outputLayout = (LinearLayout) findViewById(R.id.command_output);
        runButton = (Button) findViewById(R.id.run);
        runButton.setOnClickListener(this);
        udp("127.0.0.1","3");
        udpSender();

    }

    @Override
    public void onClick(View view) {

    }


    private void udp(String ipAddress,String message) {
        new Thread(()->{
            try {
                final int PORT = 1234; // 目标端口号
                InetAddress address = InetAddress.getByName(ipAddress);
                // 创建UDP Socket
                DatagramSocket socket = new DatagramSocket();
                byte[] buffer = message.getBytes();
                // 创建要发送的数据包
                for(int i=1;i<=100;i++) {
                    DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, PORT);
                    // 发送数据包
                    socket.send(packet);

                }
                // 关闭Socket
                socket.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }).start();
    }

    private void udpSender() {
        new Thread(()->{
            Log.d("TAG","线程正在执行");
            try {
                final int PORT = 1234; // 目标端口号
                // 创建一个 DatagramSocket 对象,并指定监听的端口号
                DatagramSocket socket = new DatagramSocket(PORT);
                byte[] buffer =  new byte[1];
                while (true) {
                    DatagramPacket packet = new DatagramPacket(buffer, buffer.length);  // 创建一个 DatagramPacket 对象,用于接收数据
                    // 接收数据n
                    socket.receive(packet);//阻塞状态,等待数据包
                    // 解析接收到的数据
                    String receivedData = new String(packet.getData(), 0, packet.getLength());
                    runOnUiThread(() -> commandEditText.setText(receivedData));
                    Log.d("AAA", receivedData);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }).start();
    }


}

分别在两个方法中创建两个线程,一个作为服务器进行监听,一个作为客户端进行数据发送。

相关推荐
提笔了无痕4 分钟前
图解HTTP、HTTP知识大全
网络·网络协议·http
q***07144 分钟前
Java实战:Spring Boot application.yml配置文件详解
java·网络·spring boot
TDengine (老段)4 分钟前
TDengine 转换函数 TO_JSON 用户手册
android·大数据·数据库·json·时序数据库·tdengine·涛思数据
2301_8002561113 分钟前
第七章 空间存储与索引 知识点梳理3(空间填充曲线)
数据库·笔记·sql·postgresql
q***428220 分钟前
SpringCloudGateWay
android·前端·后端
卫生纸不够用24 分钟前
Appium-锁屏-Android
android·appium
阿拉斯攀登33 分钟前
安卓工控机 OTA 升级方案(SpringBoot+MQTT)
android·spring boot·物联网·iot
顾林海1 小时前
从0到1搭建Android网络框架:别再让你的请求在"路上迷路"了
android·面试·架构
老前端的功夫1 小时前
HTTP 协议演进深度解析:从 1.0 到 2.0 的性能革命
前端·网络·网络协议·http·前端框架
凉凉的知识库2 小时前
书海拾遗:《枪炮、病菌与钢铁》
笔记·电子书