#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?