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();
    }


}

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

相关推荐
雨白8 小时前
NDK 初探:基于 C++ 实现参数哈希与签名校验
android
程序员正茂8 小时前
Android studio中初步使用OpenCV库
android·opencv
紫_龙9 小时前
window 维护多版本Android studio
android·ide·android studio
杉氧10 小时前
KMP 自动化之路 (4):iOS 自动化构建与签名 —— 攻克最硬的骨头
android·架构·android jetpack
xian_wwq12 小时前
【案例分析】Hugging Face生产基础设施入侵攻击分析
网络·安全
疯狂打码的少年12 小时前
【软件工程】软件质量保证(ISO/IEC 9126质量特性)
笔记
灵机一物12 小时前
企业选型参考:2026 CXL 内存扩展方案六强测评与落地指南
服务器·网络·数据库·人工智能
yeflx12 小时前
速腾Airy雷达使用记录
java·服务器·网络
CPETW13 小时前
企业版配套软件介绍 ---- USB TO SPI 3.0-Slave
网络·科技·单片机·嵌入式硬件·电子
jsons113 小时前
autofs挂载
linux·服务器·网络