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 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…