android网络编程基础二socket简单TCP服务端和客户端(kotlin语法)


服务端

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)
                    var socket: Socket = serverSocket.accept()
                    var bufferIn: BufferedReader = BufferedReader(InputStreamReader(socket.getInputStream()))
                    var bufferOut: BufferedWriter = BufferedWriter(OutputStreamWriter(socket.getOutputStream()))
                    //
                    var recvMsg = bufferIn.readLine() + System.getProperty("line.separator")
                    println("接收到的信息$recvMsg")
                    var sendMsg = "goodbye from server" + System.getProperty("line.separator")
                    bufferOut.write(sendMsg)
                    bufferOut.flush()
                    socket.close()
                }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()
    }
}

在客户端和服务端都应该添加网络许可权限

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

运行:

先运行服务端,再运行客户端

服务端显示:

客户端显示:

 

 说明:

 端口号设置应该大于1024,ip地址是手机或安卓模拟器的ip地址,我使用的是模拟器,可以在设置-WLAN-设置图标里找到IP地址

 

参考《深入理解Android网络编程》


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM