服务端
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网络编程》