Не могу получить приложение для Android для подключения к моему серверу на моем локальном компьютере

Привет, я новичок в Android и я пытаюсь заставить мое приложение для Android подключиться к моему серверу, который работает на моем локальном компьютере. Я просто пытаюсь заставить приложение отправить простое строковое сообщение на сервер первым, но постоянно получаю сообщение об ошибке. Из утверждений распечатки я вижу, что приложение завершает работу, как только оно выходит на линию с попыткой, поэтому я считаю, что существует проблема с созданием клиентского соединения. У меня также есть разрешения доступа в Интернет,ACCESS_NETWORK_STATE, ACCESS_WIFI_STATE,READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE

я попытался изменить localhost на InetAddress.getLocalHost(), но все равно не будет работать

вот мой код:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.util.StringBuilderPrinter;
import android.view.View;
import android.widget.Button;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

import static java.net.InetAddress.getLocalHost;

public class MainActivity extends AppCompatActivity{
    private Button cam;
    private Socket client;
    DataOutputStream os;
    private String IP = "localhost";
    private static final String TAG = "testing";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (android.os.Build.VERSION.SDK_INT > 9)
        {
            StrictMode.ThreadPolicy policy = new                      
            StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }
        setContentView(R.layout.activity_main);



        cam = (Button) findViewById(R.id.Button_camera);
        cam.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                Log.v(TAG, "trying to connect to server");
                try {
                    client = new Socket("My IP address entered", 8080);
                    Log.v(TAG, "client socket initalised");
                    String hey = "hey";
                    os = new DataOutputStream(client.getOutputStream());
                    Log.v(TAG, "outptu stream created");
                    os.flush();
                    Log.v(TAG, "flush");
                    os.writeBytes(hey);
                    Log.v(TAG, "written to server");
                    os.close();


                } catch (UnknownHostException e) {
                    Log.v(TAG, "Unknown error");
                    Log.v(TAG, e.toString());
                } catch (IOException e) {
                    Log.v(TAG, "IO exception u numpty");
                    Log.v(TAG, e.toString());
                }
                Intent intent = new Intent(MainActivity.this, Main2Activity.class);
                startActivity(intent);



            }
        });

    }
}

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

 connect failed: ETIMEDOUT (Connection timed out)
ACTION_DOWN before UnsetPressedState. invoking mUnsetPressedState.run()
I/Choreographer: Skipped 3792 frames!  The application may be doing too much work on its main thread.

2 ответа

Решение

Я считаю, что это определенно просто проблема с вашим IP, вы явно даете неправильный IP-адрес, потому что все остальное в порядке. Я бы порекомендовал либо получить доступ к терминалу и использовать команду ifconfig, чтобы найти свой ip, либо получить доступ к настройкам сети, если вы используете mac, как я, выберите сеть, дополнительные параметры, выберите вкладку tcp / ip и используйте адрес ipv4 в качестве адреса ip. Если это не сработает, попробуйте использовать другой порт или проверить настройки брандмауэра на локальном компьютере. Надеюсь, это поможет.

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

Другие вопросы по тегам