22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

https://www.cnblogs.com/yangfengwu/p/11192618.html

有些很细致的东西参考这篇   https://www.cnblogs.com/yangfengwu/p/5212570.html  看看就可以

咱用Android Studio做

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

包名  路径什么的自己随意哈

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

放一个textview 自己拖动,哈

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

由于没有Edittext 控件,所以,没有可以拖进来的.....

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

选择自适应

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

如果没有提示 可以   CTRL + ALT +空格

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

忘了一件事情,设置下控件的ID  实际上系统会自动设置,但是最好还是自己设置,避免以后文件多了ID冲突

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

我一般命名规则是 这个控件的名称+该控件所在xml文件的文件名然后后面是1,2,3,4..................有多少个相同的控件就这样排

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

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

连接网络通信需要加权限,我一般都会一次性把自己所有可能用到的都加进去

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

    <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"/>

其实只需要,,我是为了以后做软件省时省事

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

由于连接的时候是阻塞的(连接不上就一直等着,直到连接错误,或者超时),所以需要任务

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

还是用的

https://www.cnblogs.com/yangfengwu/p/11130428.html  这节的程序

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开                               22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

接着完善

由于不能在任务里面操作控件,所以咱需要用  Handler

和当时  https://www.cnblogs.com/yangfengwu/p/11087618.html

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

一样的道理,只不过解决的方法不一样

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

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("断开");//按钮显示断开
}
}
}
}

测试

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开 22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开    22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

现在用上上面的IP和端口号

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

socket = new Socket(editTextActivityMain1.getText().toString(),Integer.valueOf(editTextActivityMain2.getText().toString()))

22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开  22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开  22-ESP8266 SDK开发基础入门篇--编写Android TCP客户端 , 连接和断开

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

上一篇:bootstrap中table页面做省市区级联效果(级联库见前面级联编辑)(非select下拉框)


下一篇:Bootstrap Data Table简单使用(动态加载数据)