服務端
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網絡編程》