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


}

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

相关推荐
滴水之功3 分钟前
OpenWrt的WAN和LAN的切换
linux·网络·openwrt
AI视觉网奇9 分钟前
metahuman 购买安装记录
笔记·学习·ue5
koo36411 分钟前
pytorch深度学习笔记19
pytorch·笔记·深度学习
历程里程碑24 分钟前
Linux 17 程序地址空间
linux·运维·服务器·开发语言·数据结构·笔记·排序算法
莹莹学编程—成长记1 小时前
预备知识socket
网络
winfreedoms1 小时前
java-网络编程——黑马程序员学习笔记
java·网络·学习
零基础的修炼1 小时前
Linux网络---网络层
运维·服务器·网络
开开心心就好2 小时前
键盘改键工具免安装,自定义键位屏蔽误触
java·网络·windows·随机森林·计算机外设·电脑·excel
夜流冰2 小时前
工程师 - ADC的Gain和offset
笔记
wdfk_prog2 小时前
[Linux]学习笔记系列 -- [drivers][dma]stm32-dma
linux·笔记·学习