android网络编程基础二socket简单聊天

服务端保持等待来自客户端的连接和接收来自客户端的消息

服务端:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        Thread{
            kotlin.run {
                var serverSocket: ServerSocket? = null
                try {
                    serverSocket = ServerSocket(8866)
                    while (true){
                        println("等待来自客户端的链接...")
                        var socket: Socket = serverSocket.accept()
                        println("客户端已链接...")
                        var bufferIn = BufferedReader(InputStreamReader(socket.getInputStream()))
                        var recvMsg = bufferIn!!.readLine() + System.getProperty("line.separator")
                        println("接收到的信息$recvMsg")
                        //给客户端回一条信息
                        var bufferedout:BufferedWriter= BufferedWriter(OutputStreamWriter(socket.getOutputStream()))
                        var sendMsg="我已收到你发的信息" + System.getProperty("line.separator")
                        bufferedout.write(sendMsg)
                        bufferedout.flush()
                    }
                }catch (e:InterruptedIOException) {
                    // 超时错误
                    e.printStackTrace();
                    // IO 异常
                } catch (e:IOException) {
                    // 打印错误
                    e.printStackTrace();
                } finally {
                    // 判定是否初始化 ServerSocket 对象,如果初始化则关闭 serverSocket
                    if (serverSocket != null) {
                        try {
                            serverSocket.close();
                        } catch (e:IOException) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }.start()
    }
}

客户端

class MainActivity : AppCompatActivity() {

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

        Thread{
            kotlin.run {
                try{
                    var socket:Socket= Socket("10.0.2.15",8866)
                    var buffIn:BufferedReader=BufferedReader(InputStreamReader(socket.getInputStream()))
                    var buffOut:BufferedWriter= BufferedWriter(OutputStreamWriter(socket.getOutputStream()))
                    var outMsg:String="Tcp connection to 8866"+System.getProperty("line.separator")
                    buffOut.write(outMsg)
                    buffOut.flush()
                    var inMsg=buffIn.readLine()+System.getProperty("line.separator")
                    //Log.i("TCPClient", "received:$inMsg")
                    println("接受到的消息:$inMsg")
                    socket.close()
                }catch (e: UnknownHostException){
                    e.printStackTrace()
                }catch (e:IOException){
                    e.printStackTrace()
                }
            }
        }.start()
    }
}
View Code

在服务端和客户端添加网络权限

 <uses-permission android:name="android.permission.INTERNET"/>
View Code

运行:

运行服务端

 

 运行客户端

 

 服务端显示

 

 结束客户端,重新运行客户端,服务端显示

 

 这样大概就能实现简单的聊天了吧~

posted @ 2020-12-29 12:13  vocus  阅读(156)  评论(0)    收藏  举报