• socket进行服务器和客户端通信


    package com.music.mysongs.activity
    
    import android.os.Build
    import android.os.Bundle
    import android.os.Handler
    import android.os.Message
    import androidx.annotation.RequiresApi
    import kotlinx.android.synthetic.main.activity_lyric.*
    import java.io.*
    import java.net.Socket
    
    class LyricActivity : Application, Runnable {
        private val mTag = "LyricActivity"
    
        //Comment model
        private var mSocket: Socket? = null
        private var mRead: BufferedReader? = null
        private var mWrite: PrintWriter? = null
        private val port: Int = 8080
        private val host: String = "192.168.43.164"//"10.20.19.99"
        private val sb = StringBuilder()
    
        private val myHandler: Handler = Handler {
            //socket model
            txtShowComment_lyric.text = it.obj.toString()
            editSendComment_lyric.setText("")
            false
        }
    
        @RequiresApi(Build.VERSION_CODES.M)
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_lyric) 
            //socket server
            object : Thread() {
                override fun run() {
                    try {
                        mSocket = Socket(host, port)
                        mRead = BufferedReader(InputStreamReader(mSocket?.getInputStream(), "UTF-8"))
                        mWrite = PrintWriter(
                            BufferedWriter(
                                OutputStreamWriter(
                                    mSocket?.getOutputStream()
                                )
                            ), true
                        )
                    } catch (e: IOException) {
                        e.printStackTrace()
                    }
                }
            }.start()
            btnSendComment_lyric.setOnClickListener {
                if (editSendComment_lyric.text != null && mSocket!!.isConnected && !mSocket!!.isOutputShutdown) {
                    val mSend = editSendComment_lyric.text.toString()
                    mWrite!!.println(mSend)
                }
            }
            Thread(this@LyricActivity).start()
        }
    
        override fun run() {
            try {
                while (true) {
                    if (mSocket!!.isConnected && !mSocket!!.isInputShutdown) {
                        if (mRead?.readLine().also { sb.append(it + "\n") } != null) {
                            val msg = Message()
                            msg.obj = sb
                            myHandler.sendMessage(msg)
                        }
                    }
                }
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76

    1、改成服务器的IP地址和打开的端口号

    在这里插入图片描述

    2、定义读写数据流

    在这里插入图片描述

    3、保持socket连接线程的运行start()

    在这里插入图片描述

    4、监听发送按钮,然后用mWrite写到服务器去

    在这里插入图片描述

    5、客户端运行的时候用mRead读服务器传送过来的数据,然后放到handler里更新ui

    在这里插入图片描述
    在这里插入图片描述

    6、布局部分

    
    
            
                
                
    
                
    
                    
    
                    

    7、服务器部分

    参考这个的server代码
    这部分都是通用的,只是ip地址换成自己电脑的,然后打开的端口号和客户端接入的要一致

    8、运行

    1.先连接上模拟器
    2.运行app到模拟手机上
    在这里插入图片描述
    3.此时run处运行的只有一个app
    在这里插入图片描述
    4.然后运行server函数的main
    在这里插入图片描述
    5.此时ChatServer就开始运行了,并且打印了服务器的部分信息
    在这里插入图片描述
    6.app点击进入聊天室后客户端打印信息
    在这里插入图片描述
    7.点击发送按钮就可以接收了

  • 相关阅读:
    Linux安装 spark 教程详解
    基于WebApp的服装个性化定制订单管理系统
    计算机毕业设计微信小程序保险管理平台+后台
    R计算 地理集中指数
    LCR 174.寻找二叉搜索树中的目标节点
    ASEMI-1N5819二极管的参数
    CSDN话题挑战赛第2期:[一起学Java]
    C# 将音频PCM数据封装成wav文件
    Android sdk 生成api doc文档
    使用@RestControllerAdvice统一处理@ResponseBody的返回前端数据
  • 原文地址:https://blog.csdn.net/da_ma_dai/article/details/109983667