首页 > 解决方案 > 连接失败:ECONNREFUSED(连接被拒绝)

问题描述

我有基于此代码相互连接的简单客户端和服务器套接字应用程序。一开始我可以从客户端向服务器和服务器向客户端发送问候消息,但我的问题是当我尝试发送消息时发送下一条消息 onclick 它正在返回java.net.ConnectException: failed to connect to /10.0.2.16 (port 5000) from /:: (port 57650): connect failed: ECONNREFUSED (Connection refused)

两个应用程序都在同一个模拟器中运行

我的问题在哪里?

这是我的服务器:我的服务器套接字在服务中。我在服务启动时执行它

class SocketService: Service() {

override fun onBind(intent: Intent?): IBinder? {
    return null
}

override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
    thread { ClientHandler().run() }
    return START_STICKY
}

internal inner class ClientHandler() : Runnable{
    override fun run() {
        val server = ServerSocket(5000)
        val client = server.accept()
        var reader = BufferedReader(InputStreamReader(client.getInputStream()))
        var writer = PrintWriter(client.getOutputStream())
        try {
            writer.write("hello from server" + "\n")
            writer.flush()


            receiveString = reader.readLine()

        } catch (ex: Exception) {
            Timber.e("$ex")
        }
    }

}

这是我的客户

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    Timber.plant(FileLog(applicationContext))

   thread { ThreadopenPort("hello").run() }
}


fun sendMessage(view:View){
    try {
        val message = "message on button click"

        thread { ThreadopenPort(message).run() }
    }catch (ex:Exception){

        Timber.i(messageLog)
    }
}

internal inner class ThreadopenPort(private val message: String) : Runnable {
    override fun run() {
        var socket: Socket
        try {
            socket = Socket(SERVER_IP, SERVER_PORT)
            output = PrintWriter(socket.getOutputStream())
            input = BufferedReader(InputStreamReader(socket.getInputStream()))
            if (i == 0) {
                output!!.write("hello from client" + "\n")
                output!!.flush()
                rMessage = input!!.readLine()

                run {
                    runOnUiThread(Runnable {
                        textView.text = textView.text.toString() + "server: $rMessage\n"

                    })
                }

                input!!.close()
                output!!.close()
                socket.close()
            }

            if (input!!.readLine() != null){
                output!!.write(message+ "\n")
                output!!.flush()
                rMessage = input!!.readLine()

                run {
                    runOnUiThread(Runnable {
                        textView.text = textView.text.toString() + "server: $rMessage\n"

                    })
                }

                input!!.close()
                output!!.close()
                socket.close()
            }

            Timber.i("Message received from Payment Service at $formatted message: ${rMessage}")


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

标签: javaandroidkotlin

解决方案


推荐阅读