Постоянный TCP-клиент в Android приложении не получает данные - PullRequest
0 голосов
/ 10 февраля 2020

У меня ESP8266 12F в режиме Soft AP (сервер), и я пытаюсь подключить к нему мое Android приложение в постоянном режиме (TCP).

Я пытаюсь использовать этот код и могу отправить данные, но не получают ответ, и я знаю, что ответ отправляется, потому что я перехватываю соединение ESP8266.

Цель состоит в том, чтобы установить соединение клиента TCP с ESP8266 и отправлять ему пакеты в зависимости от того, что в приложении нажата кнопка, и устройство IoT может быть занятым, чтобы ответить, поэтому я не могу дождаться остановки графического интерфейса приложения; вот почему мне нужно постоянное соединение.

Я пробовал разные подходы без успеха.

package com.coolio.tcptest;

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import java.net.*;
import java.io.*;


public class ClientActivity extends AppCompatActivity {

    Socket myClient = new Socket();
    Boolean Connected = false;
    String serverName;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_client);
    }

    public class client extends AsyncTask<Void,Void,Void>
    {
        String received;
        protected Void doInBackground(Void... Params)
        {
            //String serverName = "10.7.48.108";

            int port = 1100;
            try {
                //updateText.setText("Connecting to " + serverName + " on port " + port);
               // Socket client = new Socket(serverName, port);
                if(!Connected)
                {
                    //myClient.addListener();

                    myClient = new Socket(serverName, port);
                    myClient.setTcpNoDelay(true);
                    //myClient.on("new message", onNewMessage);

                    Connected=true;
                }

                //updateText.setText("Just connected to " + client.getRemoteSocketAddress());
                OutputStream outToServer = myClient.getOutputStream();
                DataOutputStream out = new DataOutputStream(outToServer);

                InputStream inFromServer = myClient.getInputStream();
                DataInputStream in = new DataInputStream(inFromServer);

                out.writeBytes("Connected!\r\n");

                received = in.readUTF();//Stuck here

                myClient.close();

            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            return null;
        }

        protected void onPostExecute(Void aVoid)
        {
            //Never reach here

            TextView updateText = (TextView) findViewById(R.id.update);
            updateText.setText("in post");
            TextView receivedText = (TextView) findViewById(R.id.received);
            receivedText.setText("Server says: " + received);
        }
    }

    public void onSendClicked(View view)
    {
        //EditText messageView= (EditText) findViewById(R.id.ip);
        //serverName=messageView.getText().toString();
        serverName="192.168.4.1";
        new client().execute();
    }
}
...