简体   繁体   中英

Sending data back and forth from android server to python client

I have posted this few days back but now i ran into another problem after solving that one.

DESCRIPTION: working on an android app written in kotlin that behaves as a server side and Python program that works as a client both runs on same computer and try to send and receive messages from each other.I'm using a text view to display messages that i'm receiving from PC(python).

Problem: whenever i try to run client program in python.I get following output on terminal.I don't get the message that server sends on connection

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

whereas on the server side it doesn't receives anything from client.

What i have Tried: I have used port forwarding which maps port 5000 on client to 6000 on emulator as someone suggested that in the previous post which basically solved my error:61 connection refused on client side writen in python but unfortunately i have this problem.Is this because of the fact that i'm using kotlin on server side to communicate with python and should use java instead. Or i'm using wrong thread logic.

Please help me out

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
        }
    }

}

your Android App is listening on Port 6000 and the Python script is talking to 5000. Also sure your Android has IP of localhost?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM