Отправка данных туда и обратно с сервера Android на клиент Python

#java #python #android #sockets #server

#java #python #Android #сокеты #сервер

Вопрос:

Я опубликовал это несколько дней назад, но теперь я столкнулся с другой проблемой после решения этой.

ОПИСАНИЕ: работа над приложением для Android, написанным на kotlin, которое работает как серверная часть, и программой на Python, которая работает как клиент, выполняются на одном компьютере и пытаются отправлять и получать сообщения друг от друга.Я использую текстовое представление для отображения сообщений, которые я получаю с ПК (python).

Проблема: всякий раз, когда я пытаюсь запустить клиентскую программу на Python.Я получаю следующий вывод на терминале.Я не получаю сообщение, которое сервер отправляет при подключении

 server sent something.....
 b''
you are about to.....

  

в то время как на стороне сервера он ничего не получает от клиента.

Что я пробовал: я использовал переадресацию портов, которая сопоставляет порт 5000 на клиенте с 6000 на эмуляторе, как кто-то предположил в предыдущем посте, который в основном решил мою ошибку: 61 отказано в соединении на стороне клиента, записанном на python, но, к сожалению, у меня есть эта проблема.Это из-за того, что я использую kotlin на стороне сервера для связи с python и вместо этого должен использовать Java. Или я использую неправильную логику потока.

Пожалуйста, помогите мне

 import socket


def main():
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect(('127.0.0.1', 5000))
    while True:
        data = client_socket.recv(1024)
        print("server sent something.....n", data)
        print("you are about to.....")
        client_socket.sendall(bytes("hey server....", 'utf-8'))
        break
    client_socket.close()


main()
  
 package com.example.soundsource

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.Handler
import android.widget.Button
import android.widget.TextView
import java.net.ServerSocket
import java.net.Socket
import java.io.*





class MainActivity : AppCompatActivity() {



    private lateinit var textView:TextView

    companion object{
        const val COMMUNICATIONPORT = 6000
        private lateinit var serversocket:ServerSocket
        private lateinit var serverThread:Thread
        private lateinit var updateConversationHandler:Handler
    }


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
//        val sendButton:Button = findViewById(R.id.send_button)
        val showLocation = findViewById(R.id.show_location) as? Button
        showLocation?.setOnClickListener {
            val intent = Intent(this,SoundLocation::class.java)
            startActivity(intent)
        }
        textView = findViewById(R.id.text_view)
//        sendButton.setOnClickListener{
//            serverThread = Thread(ServerThread())
//            serverThread.start()
//        }
        serverThread = Thread(ServerThread())
        serverThread.start()
    }

    class ServerThread:Runnable{
        override fun run() {
            var socket: Socket
            try {
                serversocket = ServerSocket(COMMUNICATIONPORT)

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

            while (!Thread.currentThread().isInterrupted) {

                try {

                    socket = serversocket.accept()
                    val message = "client connected from ${socket.localAddress} and ${socket.localPort}....."
                    MainActivity().textView.text = message
                    val commThread = CommunicationThread(socket)
                    Thread(commThread).start()

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

            }
        }
    }


    class CommunicationThread(clientSocket: Socket) : Runnable {

        private var input: BufferedReader? = null
        private var output:PrintWriter? = null

        init {

            try {

                input = BufferedReader(InputStreamReader(clientSocket.getInputStream()))
                output = PrintWriter(clientSocket.getOutputStream(),true)

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

        }

        override fun run() {

            while (!Thread.currentThread().isInterrupted) {

                try {
                    output!!.println("Thanks for connecting with me.....")
                    val read = input!!.readLine()

                    updateConversationHandler.post(MainActivity().UpdateUIThread(read))

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

            }
        }

    }

    internal inner class UpdateUIThread(private val msg: String) : Runnable {

        override fun run() {
            val message =  "Client Says: $msg n"
            textView.text = message
        }
    }

}

  

Комментарии:

1. both runs on same computer ? У вас есть компьютер Android? android server python client .

Ответ №1:

ваше приложение для Android прослушивает порт 6000, а скрипт Python разговаривает с 5000. Также уверен, что у вашего Android есть IP localhost?