Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
145 views
in Technique[技术] by (71.8m points)

java - 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.....
", 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 
"
            textView.text = message
        }
    }

}

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...