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