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


    1. package com.example.transport1;
    2. import androidx.appcompat.app.AppCompatActivity;
    3. import android.os.Bundle;
    4. import android.util.Log;
    5. import android.view.View;
    6. import android.widget.Button;
    7. import android.widget.EditText;
    8. import android.widget.LinearLayout;
    9. import java.net.DatagramPacket;
    10. import java.net.DatagramSocket;
    11. import java.net.InetAddress;
    12. public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    13. EditText commandEditText;
    14. LinearLayout outputLayout;
    15. Button runButton;
    16. @Override
    17. protected void onCreate(Bundle savedInstanceState) {
    18. super.onCreate(savedInstanceState);
    19. setContentView(R.layout.activity_main);
    20. commandEditText = (EditText) findViewById(R.id.command);
    21. outputLayout = (LinearLayout) findViewById(R.id.command_output);
    22. runButton = (Button) findViewById(R.id.run);
    23. runButton.setOnClickListener(this);
    24. udp("127.0.0.1","3");
    25. udpSender();
    26. }
    27. @Override
    28. public void onClick(View view) {
    29. }
    30. private void udp(String ipAddress,String message) {
    31. new Thread(()->{
    32. try {
    33. final int PORT = 1234; // 目标端口号
    34. InetAddress address = InetAddress.getByName(ipAddress);
    35. // 创建UDP Socket
    36. DatagramSocket socket = new DatagramSocket();
    37. byte[] buffer = message.getBytes();
    38. // 创建要发送的数据包
    39. for(int i=1;i<=100;i++) {
    40. DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address, PORT);
    41. // 发送数据包
    42. socket.send(packet);
    43. }
    44. // 关闭Socket
    45. socket.close();
    46. } catch (Exception e) {
    47. e.printStackTrace();
    48. }
    49. }).start();
    50. }
    51. private void udpSender() {
    52. new Thread(()->{
    53. Log.d("TAG","线程正在执行");
    54. try {
    55. final int PORT = 1234; // 目标端口号
    56. // 创建一个 DatagramSocket 对象,并指定监听的端口号
    57. DatagramSocket socket = new DatagramSocket(PORT);
    58. byte[] buffer = new byte[1];
    59. while (true) {
    60. DatagramPacket packet = new DatagramPacket(buffer, buffer.length); // 创建一个 DatagramPacket 对象,用于接收数据
    61. // 接收数据n
    62. socket.receive(packet);//阻塞状态,等待数据包
    63. // 解析接收到的数据
    64. String receivedData = new String(packet.getData(), 0, packet.getLength());
    65. runOnUiThread(() -> commandEditText.setText(receivedData));
    66. Log.d("AAA", receivedData);
    67. }
    68. } catch (Exception e) {
    69. e.printStackTrace();
    70. }
    71. }).start();
    72. }
    73. }

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

  • 相关阅读:
    Qt 读写 xml 文件
    keil 分散加载文件(scatter file)分析
    通讯录的实现(静态版本和动态版本和文件版本)
    Leetcode刷题Day3----------链表
    创建阿里云的免费镜像仓库
    每个人都可以用的开源微信机器人
    【常用指令ubuntu18.04】
    Java开发经典实战!2022 国内知名大厂Java岗面经
    【Ts】约束对象、函数的正确姿势
    浅谈以驱动为中心的运维架构
  • 原文地址:https://blog.csdn.net/qq_63053996/article/details/134082943