Я хочу отправить сообщение из моего скрипта Python в мою Java-программу и показать его через мобильный эмулятор.
Вот мой код Python:
import socket
clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
port = 1095
ip = "192.168.1.104"
clientsocket.connect((ip, port))
clientsocket.send('HELLO FROM PYTHON!!'.encode())
clientsocket.close()
Я могуотправить сообщение "ПРИВЕТ ОТ ПИТОНА !!"к java-программе в eclipse просто отлично, но я не могу на всю жизнь отправить ее в java-программу на Android Studios.
Вот основная программа действий:
public class MainActivity extends AppCompatActivity {
private TextView mTextView;
private ServerSocket serverSocket;
Handler updateConversationHandler;
Thread serverThread = null;
TextView message;
public static final int port = 1095;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.text);
// Enables Always-on
//setAmbientEnabled();
message = (TextView) findViewById(R.id.message);
updateConversationHandler = new Handler();
this.serverThread = new Thread(new ServerThread());
this.serverThread.start(); // THIS WILL ACCEPT A MESSAGE FROM PYTHON CLIENT
}
@Override
protected void onStop() {
super.onStop();
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
class ServerThread implements Runnable {
public void run() {
Socket socket = null;
try {
serverSocket = new ServerSocket(port);
message.setText("successfully created");
} catch (IOException e) {
e.printStackTrace();
}
while (!Thread.currentThread().isInterrupted()) {
try {
message.setText("Waiiting..."); // WAITING FOR IT TO ACCEPT
socket = serverSocket.accept(); // IT GETS STUCK HERE
CommunicationThread commThread = new CommunicationThread(socket);
new Thread(commThread).start();
} catch (IOException e) {
e.printStackTrace();
message.setText("error");
}
}
}
}
class CommunicationThread implements Runnable {
private Socket clientSocket;
private BufferedReader input;
public CommunicationThread(Socket clientSocket) {
this.clientSocket = clientSocket;
try {
this.input = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
while (!Thread.currentThread().isInterrupted()) {
try {
String read = input.readLine();
updateConversationHandler.post(new updateUIThread(read));
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class updateUIThread implements Runnable {
private String msg;
public updateUIThread(String str) {
this.msg = str;
}
@Override
public void run() {
message.setText(message.getText().toString()+"Client Says: "+ msg + "\n"); // THIS IS SUPPOSE TO BE DISPLAYED
}
}
}
Вот кобылафайлы манифеста:
<?xml version="1.0" encoding="utf-8"?>
<uses-feature android:name="android.hardware.type.watch" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@android:style/Theme.DeviceDefault">
<uses-library
android:name="com.google.android.wearable"
android:required="true" />
<!--
Set to true if your app is Standalone, that is, it does not require the handheld
app to run.
-->
<meta-data
android:name="com.google.android.wearable.standalone"
android:value="true" />
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Проблема в том, что программа застряла в serverSocket.accept () метода run () на сервереПоток, потому что он не может достичь моей программы на Python.Мой эмулятор отображает «Waiiting», а не «Client Says: Hello From Python !!».Там нет ошибки, клиентский сокет Python просто не может достичь моего сокета сервера в Android-студиях.Я попытался использовать все IP-адреса (один из них на Wi-Fi моего компьютера, один отображался на IP-адресе wifi эмулятора телефона и ip, который печатается при использовании wifi-менеджера).
В основном: мой код Python не может быть подключен к моему коду Android Studios, но мой код Python может быть подключен к моему коду Eclipse, и я не знаю почему.
Что мне делать?