APP是作为TCP服务端,WiFi是ESP8266模块,单片机是正点原子mini版STM32的,代码也写出来了但是与WiFi连接不成功,求问到底是哪里不对啊,代码运行没问题,代码如下:
package com.example.smxy.myapplication;import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;public class ControlActivity extends AppCompatActivity { @BindView(R.id.temperature)
EditText temperature;
@BindView(R.id.humidity)
EditText humidity;
@BindView(R.id.smoke)
EditText smoke;
@BindView(R.id.close)
RadioButton close;
@BindView(R.id.open)
RadioButton open;
@BindView(R.id.welcome)
TextView welcome;
@BindView(R.id.ip)
TextView ip;
@BindView(R.id.port)
TextView port;
@BindView(R.id.connect)
Button connect;
//开辟一个socket控件
Socket socket = null; //定义数据输出流,用于发送数据
private OutputStream outputStream = null;
//定义数据输入流,用于接收数据
private InputStream inputStream = null; //定义一个逻辑便利,用于判断服务器状态
boolean isConnected = true; //定义一个逻辑变量,用于控制读数据线程是否执行
boolean read = false; //定义一个变量,判断风扇开关
int flag = 1; //1为关闭,2位开启 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_control);
ButterKnife.bind(this); String str = "欢迎来到智能家居";
Intent intent = getIntent();
String name = intent.getStringExtra("username");
welcome.setText(name + "," + str);
} @OnClick({R.id.temperature, R.id.humidity, R.id.smoke, R.id.close, R.id.open})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.temperature:
break;
case R.id.humidity:
break;
case R.id.smoke:
break;
case R.id.close:
flag = 1;
break;
case R.id.open:
flag = 2;
break;
}
} @OnClick(R.id.connect)
public void onViewClicked() {
//true表示连接
if (isConnected==true){
isConnected=false;
connect.setText("断开连接");
//启动连接线程
Connect_Thread connectThread=new Connect_Thread();
connectThread.start();
Toast.makeText(this,"wifi连接成功",Toast.LENGTH_SHORT).show();
}else {
isConnected=true;
connect.setText("连接");
}
} //连接线程
class Connect_Thread extends Thread{ @Override
public void run() { try {
if (socket==null){
//用InetAdress方法获取IP地址
InetAddress ipAdress=InetAddress.getByName(ip.getText().toString());
int portNumber = Integer.valueOf(port.getText().toString());
//创建连接地址和端口
socket=new Socket(ipAdress,portNumber);
//创建完socket连接后启动接收线程
Receive_Thread receiveThread = new Receive_Thread();
receiveThread.start();
Toast.makeText(ControlActivity.this,"数据已接收",Toast.LENGTH_SHORT).show();
}
}catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
} //接收数据线程
class Receive_Thread extends Thread{ @Override
public void run() {
try {
while (true){
//创建接收缓冲区
final byte[] buferr = new byte[256]; inputStream=socket.getInputStream();
//读取数据,并且返回数据的长度
final int len=inputStream.read(buferr);
//不允许其他线程直接操作组件
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
String str="";
int i=0;
while (i<len){
str=str+buferr[i];
i++;
}
if (str=="STATUS1"){ }else {
temperature.setText(new String(buferr,2,2));
humidity.setText(new String(buferr,5,2));
smoke.setText(new String(buferr,11,4));
} //发送数据
outputStream=socket.getOutputStream();
String send;
if (flag==1){
send="OFF";
outputStream.write(send.getBytes());
}else{
send="ON";
outputStream.write(send.getBytes());
} } catch (IOException e) {
e.printStackTrace();
}
}
});
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}