Я создал простой серверный сценарий 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;
}
}
}