Не могу получить приложение для 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-адрес, который вы используете.