Как отправить сообщение из Android в python приложение в windows с помощью сокета - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь отправить сообщение из приложения android в приложение python в windows, но оно не работает.

Android приложение работает нормально, но клиент, созданный в windows с использованием python, не запускается, показывает ошибку, что: - Traceback (последний вызов был последним): файл "client.py", строка 14, в s.connect ((socket.gethostname (), 9876)) ConnectionRefusedError: [WinError 10061] Не удалось установить соединение, поскольку целевая машина активно отказала ему

Вот мой файл client.py

#!/usr/bin/env python
# coding: utf-8

# In[1]:


import socket


# In[2]:


s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), 9876))


# In[ ]:

while True:
    msg = s.recv(1024)
    print(msg.decode("utf-8"))

Вот мой отправитель сообщения. java в android

package com.example.sockets;

import android.os.AsyncTask;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;

public class MessegeSender extends AsyncTask<String,Void,Void> {
    Socket socket;
    DataOutputStream dataOutputStream;
    PrintWriter printWriter;


    @Override
    protected Void doInBackground(String... strings) {
        String message=strings[0];

        try {
            socket = new Socket("192.168.1.6",9876);
            printWriter= new PrintWriter(socket.getOutputStream());
            printWriter.write(message);
            printWriter.flush();
            printWriter.close();
            socket.close();

        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }
}

Вот мой Mainactivity. java файл в android

package com.example.sockets;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    EditText editText;

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

        editText=(EditText) findViewById(R.id.msgBox);
    }

    public void sendMsg(View view)
    {
        Toast.makeText(this, "Function is running", Toast.LENGTH_SHORT).show();
        MessegeSender messegeSender =new MessegeSender();
        messegeSender.execute(editText.getText().toString());
    }
}

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

, если вы хотите подключить приложение android к python через сокеты, затем сделайте то же самое, что и выше в android, но измените файл python на -

#Imports Modules
import socket
import time

listensocket = socket.socket()
Port = 9876
maxConnections = 2
IP = socket.gethostname() #Gets Hostname Of Current Macheine

listensocket.bind(('',Port))

#Opens Server
listensocket.listen(maxConnections)
print("Server started at " + IP + " on port " + str(Port))

#Accepts Incomming Connection
# (clientsocket, address) = listensocket.accept()
# print("New connection made!")

# running = True


#Main
while True:
    (clientsocket, address) = listensocket.accept()
    message = clientsocket.recv(1024).decode() #Receives Message
    print(message) #Prints Message

    # if not message == "":
    #    print(message) #Prints Message

    #Closes Server If Message Is Nothing (Client Terminated)
    # elif message =="":
    #     clientsocket.close()
    #     # running = False
0 голосов
/ 14 апреля 2020

Я не уверен в точной ситуации, но если вы пытаетесь подключиться через inte rnet, возможно, вы захотите взглянуть на это разрешение или разрешения, подобные этому.

Android имеет уровень безопасности, который не разрешает подключения, если пользователь, использующий приложение, не предоставит разрешение приложения. Посмотрите на разрешения для этого. Мой ответ может быть только отправной точкой.

<uses-permission android:name="android.permission.INTERNET" />

Вот некоторые ресурсы:

Как добавить разрешение манифеста в приложение?

как создать соединение Socket в Android

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