Почему я могу запросить свой локальный сервер Arduino по http-адресу браузера, а не по http-приложению java для Android? - PullRequest
0 голосов
/ 17 июня 2019

Я новичок в Android

Я позволил простому серверу работать на моем ArduinoMega, отвечая на запросы данных датчиков.Если я запрашиваю через Arduino любой интернет-браузер из LAN / WLAN / телефона, я получаю ответ, как я хотел.

Но если я отправляю запрос из своего приложения для Android (Android studio / java / okhttp3), яне получить ответ от сервера Arduino.Это как сервер не проверяет, что клиент стучит.

Если я запрашиваю какой-либо интернет-сайт с помощью моего приложения для Android, я получаю ответ с этого сайта

Я не получаю код ошибки.

Мои идеи a.Может быть, я не могу использовать локальный IP-адрес в качестве URL, как я могу сделать в интернет-браузере б.Может быть, для Android требуется для локальной сети другое разрешение как «ИНТЕРНЕТ» c.http / https проблема?

Код Arduino

#include <Ethernet.h>
byte mac[]   = ...
byte ip[]      = { 192, 168, 178, 123 };                  // IP-Adresse
byte gateway[] = { 192, 168, 178, 1 };                    // Gateway
byte subnet[]  = { 255, 255, 255, 0 };
EthernetClient client;
EthernetServer server(80);
...
  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
...
client = server.available();         
  if (client) {

приложение не передает последнее "если", поэтому я думаю, что сервер не получает запрос.

java-код

<uses-permission
android:name="android.permission.INTERNET" />
...
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {

    private TextView mTextViewResult;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTextViewResult = findViewById(R.id.text_view_result);
        OkHttpClient client = new OkHttpClient();

        String url ="http://192.168.178.123";

        Request request = new Request.Builder()
                .url(url)
                .build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.isSuccessful()) {
                    final String myResponse = response.body().string();
                    MainActivity.this.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            mTextViewResult.setText(myResponse);
                        }
                    });
                }
            }
        });
    }
}


Если я изменяю локальный IP-адрес на URL-адрес, я получаю ответ от сервера этого URL-адреса.

...