4047|3

655

帖子

30

TA的资源

版主

楼主
 

11“万里”树莓派小车——socket学习(Android发送) [复制链接]

前面在Windows和Linux上测试了socket,这里试试在Android上使用socket,用Windows作为服务器,手机作为客户端,使用UDP通信协议。Windows端的代码详见:

Android端的代码可参考“C语言中文网”中的介绍,文中使用UDP协议每秒发送一串字符,但是只给出了核心代码,并未给出工程,初学者稍有不慎就会使用失败,我来一步一步从零开始新建一个工程。

APP搭建步骤

使用Android Studio新建一个空白工程。

在AndroidManifest.xml中添加网络使用权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>

 在布局文件中添加线性布局、一个文本框和一个按钮。

 在MainActivity.java中添加按钮的响应回调函数,在回调函数中开启线程。

 线程函数中每秒向指定IP地址和端口发送一串字符。代码中的IP地址是需要获取PC的IP地址,并约定好一个通信端口,例如1234,需要和PC的server代码中一致。

 全部代码如下。

package com.example.lb_socket_udp_simple;
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 java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class MainActivity extends AppCompatActivity {
    private Button btn_listen;
    private EditText et;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et= (EditText) findViewById (R.id.edit_text);
        btn_listen= (Button) findViewById (R.id.button);
        btn_listen.setOnClickListener (new View.OnClickListener(){
            @Override
            public void onClick (View v) {
                et.setText ("开始发送数据...");
                new SendThread().start();
            }
        });
    }
}
class SendThread extends Thread {
    public void run(){
        try {
            //首先创建一个 DatagramSocket 对象
            DatagramSocket socket=new DatagramSocket(1235);
            //创建一个InetAddree,自己测试的时候要设置成自己的IP地址
            InetAddress serverAddress= InetAddress.getByName ("192.168.31.34");
            while (true) {
                String str="Hi, lb8820265!";
                byte data []=str.getBytes ();
                //创建一个 DatagramPacket 对象,并指定要将这个数据包发送到网络当中的哪个地址以及端口号
                DatagramPacket packet=new DatagramPacket(data,data.length,serverAddress,1234);
                //调用 socket 对象的 send 方法,发送数据
                socket.send (packet) ;
                Log.d ("server", "sending...") ;
                Thread.sleep (1000) ;
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

运行方法

  1. 手机和PC连在同一个路由器上,获取PC的IP地址,并修改APP代码中的IP地址。
  2. 在Windows上编译并运行之前写的socket_UDP_win_server.cpp。
  3. 编译并在实机上运行APP,然后点击“发送”按钮。

运行结果

    在Windows的终端中会不断的显示接收到的数据

 问题

    这是一个非常简单的例子,只实现了手机向PC发送数据,那要接收PC发过来的数据要怎么弄呢?

源码

    GitHub:https://github.com/wanli-car/Examples/tree/master/Android/lb_socket_UDP_simple

    Gitee:https://gitee.com/wanli-car/Examples/tree/master/Android/lb_socket_UDP_simple

此帖出自创意市集论坛

最新回复

"万里"树莓派小车汇总贴: lb8820265的“万里”树莓派小车开源分享 - DIY/开源硬件专区 - 电子工程世界-论坛 (eeworld.com.cn)   目录:   “万里”树莓派小车开张贴  1“万里”树莓派小车——建立项目仓库 2“万里”树莓派小车——python学习(Thonny的使用) 3“万里”树莓派小车——python学习(定时任务) 4“万里”树莓派小车——C++学习(编译与运行,geany使用) 5“万里”树莓派小车——wiringPi学习(延时与线程模拟定时器) 6“万里”树莓派小车——wiringPi学习(PWM与外部中断模拟定时器) 7“万里”树莓派小车——RPi.GPIO学习(PWM与外部中断模拟定时器) 8“万里”树莓派小车——socket学习(本机通讯) 9“万里”树莓派小车——socket学习(TCP两机通讯) 10“万里”树莓派小车——socket学习(UDP两机通讯) 11“万里”树莓派小车——socket学习(Android发送) 12“万里”树莓派小车——socket学习(Android收发) 13“万里”树莓派小车——配件准备 14“万里”树莓派小车——电机驱动学习 15“万里”树莓派小车——光电编码器学习(正反转的判断) 16“万里”树莓派小车——光电编码器学习(转速的获取) 17“万里”树莓派小车——VSCode学习(编译和调试) 18“万里”树莓派小车——Makefile学习 19“万里”树莓派小车——VSCode学习(多C文件链接调试) 20“万里”树莓派小车——电机控制学习(控制速度) 21“万里”树莓派小车——电机控制学习(4轮速度控制) 22“万里”树莓派小车——手机遥控电机转动 23“万里”树莓派小车——无屏幕连接树莓派 24“万里”树莓派小车——树莓派64位系统bullseye跑分测试 25“万里”树莓派小车——纳姆轮控制 26“万里”树莓派小车——程序开机启动 27“万里”树莓派小车——固定和获取树莓派IP地址 28“万里”树莓派小车——小车组装 29“万里”树莓派小车——直行偏向问题与新控制模式 30.“万里”树莓派小车——第一阶段完成展示(从零开始介绍)   详情 回复 发表于 2022-3-21 13:41
点赞 关注
个人签名QQ:252669569
 
 

回复
举报

1万

帖子

2853

TA的资源

管理员

来自 2楼
 

"万里"树莓派小车汇总贴:

lb8820265的“万里”树莓派小车开源分享 - DIY/开源硬件专区 - 电子工程世界-论坛 (eeworld.com.cn)

 

目录:

 

“万里”树莓派小车开张贴 

1“万里”树莓派小车——建立项目仓库

2“万里”树莓派小车——python学习(Thonny的使用)

3“万里”树莓派小车——python学习(定时任务)

4“万里”树莓派小车——C++学习(编译与运行,geany使用)

5“万里”树莓派小车——wiringPi学习(延时与线程模拟定时器)

6“万里”树莓派小车——wiringPi学习(PWM与外部中断模拟定时器)

7“万里”树莓派小车——RPi.GPIO学习(PWM与外部中断模拟定时器)

8“万里”树莓派小车——socket学习(本机通讯)

9“万里”树莓派小车——socket学习(TCP两机通讯)

10“万里”树莓派小车——socket学习(UDP两机通讯)

11“万里”树莓派小车——socket学习(Android发送)

12“万里”树莓派小车——socket学习(Android收发)

13“万里”树莓派小车——配件准备

14“万里”树莓派小车——电机驱动学习

15“万里”树莓派小车——光电编码器学习(正反转的判断)

16“万里”树莓派小车——光电编码器学习(转速的获取)

17“万里”树莓派小车——VSCode学习(编译和调试)

18“万里”树莓派小车——Makefile学习

19“万里”树莓派小车——VSCode学习(多C文件链接调试)

20“万里”树莓派小车——电机控制学习(控制速度)

21“万里”树莓派小车——电机控制学习(4轮速度控制)
22“万里”树莓派小车——手机遥控电机转动

23“万里”树莓派小车——无屏幕连接树莓派

24“万里”树莓派小车——树莓派64位系统bullseye跑分测试

25“万里”树莓派小车——纳姆轮控制

26“万里”树莓派小车——程序开机启动

27“万里”树莓派小车——固定和获取树莓派IP地址

28“万里”树莓派小车——小车组装

29“万里”树莓派小车——直行偏向问题与新控制模式

30.“万里”树莓派小车——第一阶段完成展示(从零开始介绍)

此帖出自创意市集论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 
 

回复

6828

帖子

0

TA的资源

五彩晶圆(高级)

板凳
 

关于APP搭建步骤整的很全,收藏

此帖出自创意市集论坛
 
 
 

回复

5263

帖子

239

TA的资源

管理员

4
 

汇总(已更新16篇):lb8820265的“万里”树莓派小车开源分享

此帖出自创意市集论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表