Basi c Android - Python связь - PullRequest
       28

Basi c Android - Python связь

0 голосов
/ 06 августа 2020

Я создал простой серверный сценарий Python и клиентский сценарий Android на основе этого материала YouTube, который я нашел. Всякий раз, когда я запускаю server.py на своем P C и клиентское приложение на моем телефоне, я получаю следующую ошибку Logcat: java.net.NoRouteToHostException: Host unreachable

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

Ниже приведены коды моего сервера и клиента:

Код сервера - Python

import socket
import sys

HOST = '192.168.0.15'
PORT = 8888

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print('Socket created.')
try:
    s.bind((HOST, PORT))
except socket.error as err:
    print('Bind failed, error code: ' + str(err[0]) + '. Message: ' + str(err[1]))
    sys.exit(0)
print('Socket bind success.')
s.listen(10)
print('Socket is now listening.')

while True:
    conn, addr = s.accept()
    print(f"Connection with {addr[0]}: {addr[1]}.")
    buf = conn.recv(64)
    print(buf)
s.close()

Код клиента - Android

package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;
import java.io.PrintWriter;
import java.net.Socket;
import android.os.AsyncTask;
import android.view.View;
import android.widget.Button;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class MainActivity extends AppCompatActivity {

    private static String HOST = "192.168.0.15";
    private static int PORT = 8888;

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

        final EditText editText = findViewById(R.id.editText);
        Button button = findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new SendMessage().execute(editText.getText().toString());
                editText.getText().clear();
            }
        });
    }

    public class SendMessage extends AsyncTask<String, Void, Void> {
        private Exception exception;

        protected Void doInBackground(String... params) {
            try {
                try{
                    Socket socket = new Socket(HOST, PORT);
                    PrintWriter outToServer = new PrintWriter(
                            new OutputStreamWriter(
                                    socket.getOutputStream()));
                    outToServer.print(params[0]);
                    outToServer.flush();
                } catch(IOException e) {
                    e.printStackTrace();
                }
            } catch (Exception e ) {
                this.exception = e;
                return null;
            }
            return null;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...