Android 与ESP8266-01上设置的服务器通信的TCP客户端

Android 与ESP8266-01上设置的服务器通信的TCP客户端,android,tcp,arduino,client,esp8266,Android,Tcp,Arduino,Client,Esp8266,我正在安卓应用程序和连接到Arduino uno的ESP8266模块之间建立TCP/IP通信。我使用AT命令设置服务器,如下所示: AT+CWMODE=1 AT+CIPMUX=1 AT+CIPSERVER=1,80 我每个人都很好 我想向应用程序发送一个int:0或1,应用程序读取int,然后将editText中键入的文本发送到ESP8266 现在,这是我的应用程序代码: public class MainActivity extends AppCompatActivity { TextView

我正在安卓应用程序和连接到Arduino uno的ESP8266模块之间建立TCP/IP通信。我使用AT命令设置服务器,如下所示:

AT+CWMODE=1
AT+CIPMUX=1
AT+CIPSERVER=1,80
我每个人都很好

我想向应用程序发送一个int:0或1,应用程序读取int,然后将editText中键入的文本发送到ESP8266

现在,这是我的应用程序代码:

public class MainActivity extends AppCompatActivity {
TextView tv;
EditText txt;
EditText txt2;
Button b;
string response;
private static Socket s ;
private static PrintWriter printWriter;
String message="";
private static String ip="";

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    b = (Button) findViewById(R.id.button);
    txt = (EditText) findViewById(R.id.editText);
    tv = (TextView) findViewById(R.id.textView) ;
    txt2=(EditText)findViewById(R.id.editText2);

 }
 class myTask extends AsyncTask<Void,Void,Void>{

    @Override
    protected Void doInBackground(Void... params)
    {
        try
        {        s= new Socket(ip,80);

                //READING THE INPUT

           BufferedReader in = new BufferedReader(new 
           InputStreamReader(s.getInputStream()));
            while(in!=null) {
                 response = in.readLine();
            }
                //SENDING THE MESSAGE
            printWriter= new PrintWriter(s.getOutputStream());
            printWriter.write(message);
            printWriter.flush();
            post_send();


            // closing all connections
           // printWriter.close();
           // in.close();
           // s.close();


        }catch(IOException e)
        {e.printStackTrace();}
           return null;
    }
  }
    public void send_text(View v)
    {
        message= txt.getText().toString();
        ip=txt2.getText().toString();
        myTask mt = new myTask();
        mt.execute();
        Toast.makeText(getApplicationContext(),"MT 
        LAUNCHED",Toast.LENGTH_LONG).show();

     }

     public void post_send(){
        Toast.makeText(getApplicationContext(),response 
         ,Toast.LENGTH_LONG).show();
        Toast.makeText(getApplicationContext(),"Data 
        sent",Toast.LENGTH_LONG).show();
    }
   }
所以我键入:

 AT+CIPSEND=0,4
我得到:

SEND OK
但是没有一个祝酒词显示出来 帮助我?我做错了什么

s=新插座(ip,80)

如果在onClick Listener的onClick()中执行该代码,您将得到一个
NetworkOnMainThreadException
。这会让你的应用程序崩溃

所有internet代码(以及连接和读取)都应该从线程或异步任务执行


您的写作已在异步任务中。这就是方法。

Toast.makeText(getApplicationContext(),“发送的数据”,Toast.LENGTH\u LONG.show()否。你不能在那里敬酒。不过,您可以将该statmenent放在AsyncTask的onPostExecute()中。但只有在确定消息已发送的情况下才能调用它。我删除了connect_server功能,并将其内容放在DoInBackground的顶部。应用程序不再崩溃,但仍然不接收/发送任何数据。如果新客户端连接,请告诉服务器首先要做什么。服务器会首先向客户端发送一些东西吗?或者服务器会首先尝试从客户端读取消息/命令吗?告诉我们您的协议。@greenapps done
我发送int 1串行监视器:
您想向客户端发送“1”。是字符串还是整数?此外,这还不够,因为您的客户正试图阅读一行。所以也只发送文本。一串。不是整数(由四个字节组成)。所以服务器也应该写一行。
SEND OK