1. 程式人生 > 實用技巧 >android網路程式設計基礎二socket簡單聊天

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

執行:

執行服務端

執行客戶端

服務端顯示

結束客戶端,重新執行客戶端,服務端顯示

這樣大概就能實現簡單的聊天了吧~