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


}

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

相关推荐
曾经的三心草11 分钟前
Python2-工具安装使用-anaconda-jupyter-PyCharm-Matplotlib
android·java·服务器
grrrr_126 分钟前
【工具类】Nuclei YAML POC 编写以及批量检测
网络·安全·web安全
Jerry1 小时前
Compose 设置文字样式
android
aramae1 小时前
C++ -- 模板
开发语言·c++·笔记·其他
飞猿_SIR1 小时前
android定制系统完全解除应用安装限制
android
小马学嵌入式~2 小时前
嵌入式 SQLite 数据库开发笔记
linux·c语言·数据库·笔记·sql·学习·sqlite
hour_go2 小时前
用户态与内核态的深度解析:安全、效率与优化之道
笔记·操作系统
青 .2 小时前
数据结构---二叉搜索树的实现
c语言·网络·数据结构·算法·链表
索迪迈科技2 小时前
影视APP源码 SK影视 安卓+苹果双端APP 反编译详细视频教程+源码
android·影视app源码·sk影视
孔丘闻言2 小时前
python调用mysql
android·python·mysql