22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开
https://www.cnblogs.com/yangfengwu/p/11192618.html
有些很细致的东西参考这篇 https://www.cnblogs.com/yangfengwu/p/5212570.html 看看就可以
咱用Android Studio做
包名 路径什么的自己随意哈
放一个textview 自己拖动,哈
由于没有Edittext 控件,所以,没有可以拖进来的.....
选择自适应
如果没有提示 可以 CTRL + ALT +空格
忘了一件事情,设置下控件的ID 实际上系统会自动设置,但是最好还是自己设置,避免以后文件多了ID冲突
我一般命名规则是 这个控件的名称+该控件所在xml文件的文件名然后后面是1,2,3,4..................有多少个相同的控件就这样排
public class MainActivity extends AppCompatActivity { EditText editTextActivityMain1,editTextActivityMain2;//定义两个EditText变量,变量名字我一般设置的和先前页面里面的一样
Button buttonActivityMain1;//连接按钮
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //获取控件
editTextActivityMain1 = findViewById(R.id.editTextActivityMain1);
editTextActivityMain2 = findViewById(R.id.editTextActivityMain2);
buttonActivityMain1 = findViewById(R.id.buttonActivityMain1);
}
}
连接网络通信需要加权限,我一般都会一次性把自己所有可能用到的都加进去
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.VIBRATE" />
<!--读手机内容的权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
其实只需要,,我是为了以后做软件省时省事
由于连接的时候是阻塞的(连接不上就一直等着,直到连接错误,或者超时),所以需要任务
还是用的
https://www.cnblogs.com/yangfengwu/p/11130428.html 这节的程序
接着完善
由于不能在任务里面操作控件,所以咱需要用 Handler
和当时 https://www.cnblogs.com/yangfengwu/p/11087618.html
一样的道理,只不过解决的方法不一样
public class MainActivity extends AppCompatActivity { EditText editTextActivityMain1,editTextActivityMain2;//定义两个EditText变量,变量名字我一般设置的和先前页面里面的一样
Button buttonActivityMain1;//连接按钮 Socket socket;//定义一个Socket MyHandler myHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); myHandler = new MyHandler(); //获取控件
editTextActivityMain1 = findViewById(R.id.editTextActivityMain1);
editTextActivityMain2 = findViewById(R.id.editTextActivityMain2);
buttonActivityMain1 = findViewById(R.id.buttonActivityMain1); //连接按钮点击事件
buttonActivityMain1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (buttonActivityMain1.getText().toString() == "连接"){
new Thread(new Runnable() {
@Override
public void run() {
//这里面写具体的程序
try {
socket = new Socket("192.168.4.1",);//连接TCP服务器
if (socket.isConnected()){//如果连接上TCP服务器
Log.e("MainActivity", "isConnected");
Message msg = myHandler.obtainMessage();//从消息队列拉取个消息变量
msg.what = ;//设置消息变量的 what 变量值 为1
myHandler.sendMessage(msg);//插入消息队列
}
}
catch (Exception e){
Log.e("MainActivity", e.toString());
}
}
}).start();
}
else {
try{ socket.close(); }catch (Exception e){} //关闭连接
buttonActivityMain1.setText("连接");//按钮显示连接
}
}
});
} //Handler
class MyHandler extends Handler {
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == ){//接收到消息变量的 what 变量值 为1
buttonActivityMain1.setText("断开");//按钮显示断开
}
}
}
}
测试
现在用上上面的IP和端口号
socket = new Socket(editTextActivityMain1.getText().toString(),Integer.valueOf(editTextActivityMain2.getText().toString()))
public class MainActivity extends AppCompatActivity { EditText editTextActivityMain1,editTextActivityMain2;//定义两个EditText变量,变量名字我一般设置的和先前页面里面的一样
Button buttonActivityMain1;//连接按钮 Socket socket;//定义一个Socket MyHandler myHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); myHandler = new MyHandler(); //获取控件
editTextActivityMain1 = findViewById(R.id.editTextActivityMain1);
editTextActivityMain2 = findViewById(R.id.editTextActivityMain2);
buttonActivityMain1 = findViewById(R.id.buttonActivityMain1);
buttonActivityMain1.setText("连接");//加上这个,否则按钮需要点击两次才会判断按钮的Text是"连接" //连接按钮点击事件
buttonActivityMain1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (buttonActivityMain1.getText().toString() == "连接"){
new Thread(new Runnable() {
@Override
public void run() {
//这里面写具体的程序
try {
socket = new Socket(editTextActivityMain1.getText().toString(),Integer.valueOf(editTextActivityMain2.getText().toString()));//连接TCP服务器
if (socket.isConnected()){//如果连接上TCP服务器
Log.e("MainActivity", "isConnected");
Message msg = myHandler.obtainMessage();//从消息队列拉取个消息变量
msg.what = ;//设置消息变量的 what 变量值 为1
myHandler.sendMessage(msg);//插入消息队列
}
}
catch (Exception e){ Log.e("MainActivity", e.toString());
}
}
}).start();
}
else {
try{ socket.close(); }catch (Exception e){} //关闭连接
buttonActivityMain1.setText("连接");//按钮显示连接
}
}
});
} //Handler
class MyHandler extends Handler {
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == ){//接收到消息变量的 what 变量值 为1
buttonActivityMain1.setText("断开");//按钮显示断开
}
}
}
}
https://www.cnblogs.com/yangfengwu/p/11204436.html
22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开的更多相关文章
- 23-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 加入消息处理
https://www.cnblogs.com/yangfengwu/p/11203546.html 先做接收消息 然后接着 public class MainActivity extends App ...
- 27-ESP8266 SDK开发基础入门篇--编写Android SmartConfig一键配网程序
style="font-size: 18pt;">https://www.cnblogs.com/yangfengwu/p/11429007.html https://wik ...
- 28-ESP8266 SDK开发基础入门篇--编写wifi模块TCP 客户端程序(官方API版,非RTOS版)
https://www.cnblogs.com/yangfengwu/p/11432795.html 注:这节实现的功能是WIFI模块作为TCP 客户端,连接咱的TCP服务器,然后实现透传 本来想着做 ...
- 29-ESP8266 SDK开发基础入门篇--编写TCP 客户端程序(Lwip RAW模式,非RTOS版,精简入门)
https://www.cnblogs.com/yangfengwu/p/11456667.html 由于上一节的源码长时间以后会自动断开,所以再做这一版非RTOS版的,咱直接用lua源码里面别人写的 ...
- 26-ESP8266 SDK开发基础入门篇--编写WIFI模块 SmartConfig/Airkiss 一键配网
https://www.cnblogs.com/yangfengwu/p/11427504.html SmartConfig/Airkiss 配网需要APP/微信公众号,这节大家先使用我做好的APP/ ...
- 8-ESP8266 SDK开发基础入门篇--编写串口上位机软件
https://www.cnblogs.com/yangfengwu/p/11087558.html 咱用这个编写 ,版本都无所谓哈,只要自己有就可以,不同版本怎么打开 https://www.cnb ...
- 9-ESP8266 SDK开发基础入门篇--编写串口上位机软件
https://www.cnblogs.com/yangfengwu/p/11087613.html 页面修改成这样子 现在看串口发送数据 点击点亮 发送0xaa 0x55 0 ...
- 19-ESP8266 SDK开发基础入门篇--C# TCP客户端编写 , 连接和断开
https://www.cnblogs.com/yangfengwu/p/11130428.html 渐渐的看过去,,,好多节了... 这节做一个C# TCP客户端 新建项目啥子的就不详细截图写了,自 ...
- 1-ESP8266 SDK开发基础入门篇--开发环境搭建
因为今天终于做好了自己的另一块工控板,所以我就开始写基础公开篇的内容,希望自己小小的努力能够帮到大家 自己做的另一块板子 https://www.cnblogs.com/yangfengwu/cate ...
随机推荐
- linux查看当前路径命令 pwd
pwd命令能够显示当前所处的路径. 这个命令比较简单,如果有时在操作过程中忘记了当前的路径,则可以通过此命令来查看路径,其执行方式为: # pwd /home/your_username 第一行为运行 ...
- [cf 1239 B] The World Is Just a Programming Task (Hard Version)
题意: 给你一个长度为n的括号序列,你可以交换其中的两个元素,需要使该序列的n个循环移位中合法的括号序列个数尽量多. 输出最大的答案以及交换哪两个元素能够取到这个答案. $n\leq 3\times ...
- [cf 1194 D] 1-2-K Game
(当时让这道sb题卡住了,我比sb还sb) 题意: n个东西,两个人轮流取,每次可以取走1个,2个或k个,不能取的人输,求谁必胜. $0\leq n \leq 10^{9},3\leq k \leq ...
- 反射之关于MethodInfo的使用
1.MethodInfo类是在System.Reflection命名空间底下,既然是在Reflection空间底下.故名思议关于反射相关的操作,其中比较重要的方法是Invoke()方法,它是加载相同程 ...
- 学习网络BGP必备基础知识
外部网关协议,使用TCP作为传输层协议,支持CIDR,增量更新,距离矢量路由协议,无环路,路由策略丰富,可防止路由震荡,易于扩展. BGP概述 #BGP工作原理 之 报文类型 TCP三次握手 open ...
- 拓展 - Webrtc 的回声抵消(aec、aecm)算法简介
webrtc 的回声抵消(aec.aecm)算法简介 原文链接:丢失.不好意思 webrtc 的回声抵消(aec.aecm)算法主要包括以下几个重要模块:1.回声时延估计 2.NLMS( ...
- echarts统计x轴区间的数值
有时我们需要统计自定义echarts图,统计x轴区间的y轴数量. 思路是利用echarts的自定义配置:option.series[i].type='custom'中的renderItem(param ...
- 英语juelrye宝石
juelrye 外语词汇,代指宝石珠宝稀有的物件 中文名珠宝装饰 外文名juelrye 目录 释义 juelrye Noun(名词) Uncountable(不可数) 1. juelrye des ...
- MySQL修炼之路三
1. SQL查询 1. 执行顺序 3. select ... 聚合函数 from 表名 1. where ... 2. group by ... 4. having ... 5. order by . ...
- golang面向对象实现
面向对象编程三大特点:封装.继承.多态. 1. 构造函数 Go不支持构造器.如果某类型的零值不可用,需要提供NewT(parameters)函数,用来初始化T类型的变量.按照Go的惯例,应该把创建T类 ...