102
社区成员
发帖
与我相关
我的任务
分享1.掌握Android平台上Socket编程的基本概念。
2.学习使用Kotlin语言实现Android Socket服务端和客户端。
3.理解TCP/UDP协议在Socket通信中的应用。
功能描述
1.基于Socket的通信
2.采用C/S结构
3.客户端能够向服务端发送数据,并以Toast的形式显示服务端的返回信息
4.服务端能接收客户端发送过来的数据,显示在服务端的TextView中,并且每收一条数据就回送一个“已接收”消息给客户端。
<!-- 在AndroidManifest.xml中添加INTERNET权限 -->
<uses-permission android:name="android.permission.INTERNET" />

服务器端service部分核心代码:
① main_activity:
//从Intent对象中获取消息文本,并将其设置为TextView的文本。
private val messageReceiver = object : BroadcastReceiver() {//创建BroadcastReceiver对象
override fun onReceive(context: Context?, intent: Intent?) {
if (intent?.action == "com.example.action.MESSAGE") {
val message = intent.getStringExtra("message")
val text = findViewById<TextView>(R.id.client_text)
text.text = message
}
}
}
@SuppressLint("MissingInflatedId")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val startServiceBtn: Button = findViewById(R.id.startServiceBtn)
val stopServiceBtn: Button = findViewById(R.id.stopServiceBtn)
val intentFilter = IntentFilter("com.example.action.MESSAGE")
registerReceiver(messageReceiver, intentFilter)//注册BroadcastReceiver对象
startServiceBtn.setOnClickListener {
val intent = Intent(this, MyService::class.java)
startService(intent)//启动Service
Toast.makeText(this, "您已成功启动服务器!", Toast.LENGTH_SHORT).show()
}
stopServiceBtn.setOnClickListener {
val intent = Intent(this, MyService::class.java)
stopService(intent)//停止Service
Toast.makeText(this, "您已成功关闭服务器!", Toast.LENGTH_SHORT).show()
}
}
}
② 服务器端service部分核心代码:

③ 服务器端实现回显消息到客户端:

④ 客户端核心代码:


⑤ 实验结果:
先在服务器端点击“启动”按钮,再在客户端点击“连接服务器”按钮,服务器端出现以下字样说明连接成功。



在本次实验中,我深入理解了Android平台上Socket编程的基本概念,并通过Kotlin语言实现了服务端和客户端的通信。通过实践,我学习到了TCP和UDP协议在Socket通信中的应用,并对它们之间的区别有了更深刻的认识。在实现客户端向服务端发送数据的功能时,我采用了TCP协议,确保了数据传输的可靠性。同时,客户端能够以Toast的形式接收并显示服务端的返回信息,这种交互方式增强了用户体验。服务端的设计则更为复杂,不仅要接收客户端的数据,还要实时显示在TextView中,并且对每条接收到的数据给予“已接收”的反馈,这让我对服务端的数据处理和响应机制有了更全面的理解。整个实验过程中,我体会到了网络编程的复杂性和挑战性,同时也感受到了成功实现功能后的成就感。这次实验不仅提升了我的编程技能,也加深了我对网络通信原理的理解。