android網路程式設計基礎二socket簡單聊天
阿新 • • 發佈:2020-12-29
服務端保持等待來自客戶端的連線和接收來自客戶端的訊息
服務端:
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
執行:
執行服務端
執行客戶端
服務端顯示
結束客戶端,重新執行客戶端,服務端顯示
這樣大概就能實現簡單的聊天了吧~