20202428 2023-2024-2 《移动平台开发与实践》第4次作业

白鹤大人泰库拉 2024-06-22 09:40:56

一、实验内容

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:


 
  1. //从Intent对象中获取消息文本,并将其设置为TextView的文本。

  2. private val messageReceiver = object : BroadcastReceiver() {//创建BroadcastReceiver对象

  3. override fun onReceive(context: Context?, intent: Intent?) {

  4. if (intent?.action == "com.example.action.MESSAGE") {

  5. val message = intent.getStringExtra("message")

  6. val text = findViewById<TextView>(R.id.client_text)

  7. text.text = message

  8. }

  9. }

  10. }

  11. @SuppressLint("MissingInflatedId")

  12. override fun onCreate(savedInstanceState: Bundle?) {

  13. super.onCreate(savedInstanceState)

  14. setContentView(R.layout.activity_main)

  15.  
  16. val startServiceBtn: Button = findViewById(R.id.startServiceBtn)

  17. val stopServiceBtn: Button = findViewById(R.id.stopServiceBtn)

  18.  
  19. val intentFilter = IntentFilter("com.example.action.MESSAGE")

  20. registerReceiver(messageReceiver, intentFilter)//注册BroadcastReceiver对象

  21.  
  22. startServiceBtn.setOnClickListener {

  23. val intent = Intent(this, MyService::class.java)

  24. startService(intent)//启动Service

  25. Toast.makeText(this, "您已成功启动服务器!", Toast.LENGTH_SHORT).show()

  26. }

  27. stopServiceBtn.setOnClickListener {

  28. val intent = Intent(this, MyService::class.java)

  29. stopService(intent)//停止Service

  30. Toast.makeText(this, "您已成功关闭服务器!", Toast.LENGTH_SHORT).show()

  31. }

  32. }

  33.  

}
② 服务器端service部分核心代码:

 

img

 

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

 

img

 

④ 客户端核心代码:

 

img

 

 

img

 

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

三、学习中遇到的问题及解决

  • 问题1:客户端连接服务器端失败
  • 问题1解决方案:添加权限

 

img

 

四、学习感悟

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

 

 

 

 

...全文
213 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

102

社区成员

发帖
与我相关
我的任务
社区描述
实验报告
android 高校
社区管理员
  • blackwall0321
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧