Разъем для Android через Интернет - PullRequest
2 голосов
/ 25 сентября 2011

Я экспериментирую с сокетом связи между Android и Windows.Все работает нормально, пока я не использую адрес 10.0.2.2, который является обратной связью с компьютером, на котором работает эмулятор.Но если я дам какой-либо другой адрес конструктору Socket, связь истечет.Моя цель - общаться между моим телефоном и компьютером через Интернет.Я также попробовал это на своем телефоне, так что я не думаю, что это проблема с брандмауэром.Вот мой код:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    try {
        clientSocket = new Socket("10.0.2.2", 48555);
        Log.d("Offdroid", "socket connected");
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.out.println(e.toString());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        System.out.println(e.toString());
    }
}

public void connectServer(View button) {
    try {
        String message = "shutdown";
        byte[] messageBytes = message.getBytes("US-ASCII");
        int messageByteCount = messageBytes.length;
        byte[] messageSizeBytes = new byte[2];
        messageSizeBytes = intToByteArray(messageByteCount);

        byte[] sendBytes = concatenateArrays(messageSizeBytes, messageBytes);

        Log.d("Offdroid", Integer.toString(messageSizeBytes.length));

        clientSocket.setReceiveBufferSize(16);
        clientSocket.setSendBufferSize(512);
        OutputStream outStream = clientSocket.getOutputStream();
        //InputStream inStream = clientSocket.getInputStream();

        outStream.write(sendBytes, 0, sendBytes.length);
    } catch(Exception EX) {
        Log.e("Offdroid", EX.getMessage());
    }
}

Я также ищу встроенную функцию Java вместо функции concatenateArrays, которая просто объединяет двухбайтовый массив.

Редактировать:

Извините, может быть, я не предоставил достаточно информации.Я уже попробовал мой внешний IP-адрес, используемый для подключения к Интернету, и мой IP-адрес локальной сети.Порт на маршрутизаторе перенаправлен на мой компьютер.Поэтому, если я напишу «192.168.1.101» или IP-адрес, предоставленный интернет-провайдером вместо «10.0.2.2», тогда я не смогу подключиться.это был мой брандмауэр.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2011

Хорошо, я понял, что это мой брандмауэр.

0 голосов
/ 25 сентября 2011

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

Я предполагаю, что вы используете какую-то общую сеть и получаете этот (10.0.2.2) IP. Ваш компьютер должен быть напрямую подключен к Интернету, чтобы это работало с телефона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...