实验四 Android Socket编程技术

blackwall0321 2024-04-24 20:57:34

Android Socket编程技术

一、实验目的

  1. 掌握Android平台上Socket编程的基本概念。
  2. 学习使用Kotlin语言实现Android Socket服务端和客户端。
  3. 理解TCP/UDP协议在Socket通信中的应用。

二、实验环境

  • Android Studio
  • Kotlin编程语言
  • 模拟器或真实Android设备

三、实验内容

1. 服务端实现

(1) 创建一个新的Android项目,并在项目中添加必要的权限,如INTERNET权限。  

xml复制代码

 <!-- 在AndroidManifest.xml中添加INTERNET权限 -->
 <uses-permission android:name="android.permission.INTERNET" />

(2) 编写服务端代码,创建一个ServerSocket监听指定端口。

kotlin代码

 import java.io.IOException
 import java.io.InputStream
 import java.io.OutputStream
 import java.net.ServerSocket
 import java.net.Socket
  
 class Server {
 private val serverSocket: ServerSocket
 private val port: Int
  
 constructor(port: Int) {
 this.port = port
 try {
 serverSocket = ServerSocket(port)
 println("Server started on port $port")
 } catch (e: IOException) {
 throw RuntimeException("Error occurred while starting server", e)
 }
 }
  
 fun acceptClients() {
 while (true) {
 try {
 val clientSocket = serverSocket.accept()
 println("Client connected from ${clientSocket.inetAddress.hostAddress}")
 handleClient(clientSocket)
 } catch (e: IOException) {
 println("Error occurred while accepting client")
 e.printStackTrace()
 }
 }
 }
  
 private fun handleClient(clientSocket: Socket) {
 

try {

val inputStream: InputStream = clientSocket.getInputStream();

 val outputStream: OutputStream = clientSocket.getOutputStream()
 // 读取客户端发送的数据并处理
 // 发送数据回客户端
 } catch (e: IOException) {
 println("Error occurred while handling client")
 e.printStackTrace()
 } finally {
 try {
 clientSocket.close()
 } catch (e: IOException) {
 println("Error occurred while closing client socket")
 e.printStackTrace()
 }
 }
 }
 }

2. 客户端实现

(1) 编写客户端代码,创建一个Socket对象连接服务端。

kotlin代码

 import java.io.IOException
 import java.io.InputStream
 import java.io.OutputStream
 import java.net.InetSocketAddress
 import java.net.Socket
  
 class Client {
 private val socket: Socket
 private val serverAddress: String
 private val serverPort: Int
  
 constructor(serverAddress: String, serverPort: Int) {
 this.serverAddress = serverAddress
 this.serverPort = serverPort
 try {
 socket = Socket()
 socket.connect(InetSocketAddress(serverAddress, serverPort), 10000) // 10秒超时
 println("Connected to server at $serverAddress:$serverPort")
 } catch (e: IOException) {
 throw RuntimeException("Error occurred while connecting to server", e)
 }
 }
  
 fun sendData(data: String) {
 

try {

val outputStream: OutputStream = socket.getOutputStream()

 outputStream.write(data.toByteArray())
 println("Data sent to server: $data")
 } catch (e: IOException) {
 println("Error occurred while sending data to server")
 e.printStackTrace()
 }
 }
  
 fun receiveData(): String {
 

try {

val inputStream: InputStream = socket.getInputStream()

 val buffer = ByteArray(1024)
 val bytesRead = inputStream.read(buffer)
 return String(buffer, 0, bytesRead)
 } catch (e: IOException) {
 println("Error occurred while receiving data from server")
 e.printStackTrace()
 return ""
 }
 }
  
 fun closeConnection() {
 try {
 socket.close()
 } catch (e: IOException) {
 println("Error occurred while closing connection")
 e.printStackTrace()
 }
 }
 }

3. 运行和测试

(1) 启动服务端,在后台线程中调用acceptClients()方法监听客户端连接。

(2) 启动客户端,连接服务端,并使用sendData()方法发送数据

四、实验总结

完成实验后,总结实验过程中遇到的问题和解决方法。

 

# 学号 2023-2024-2 《移动平台开发与实践》第1次作业

## 1.实验内容 
总结一下本周学习内容,不要复制粘贴
## 2.实验过程
## 3.学习中遇到的问题及解决 
- 问题1:XXXXXX 
- 问题1解决方案:XXXXXX 
- 问题2:XXXXXX 
- 问题2解决方案:XXXXXX - ... 
## 4.学习感悟、思考等) 
xxx xxx
 
## 参考资料 
- [《Java程序设计与数据结构教程(第二版)》](https://book.douban.com/subject/26851579/) 
- [《Java程序设计与数据结构教程(第二版)》学习指导](http://www.cnblogs.com/rocedu/p/5182332.html) 
- ...

...全文
1004 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
0人已提交
完成率0%
暂无数据
回复
切换为时间正序
请发表友善的回复…
发表回复

102

社区成员

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

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