102
社区成员
发帖
与我相关
我的任务
分享Android Socket编程技术
一、实验目的
二、实验环境
三、实验内容
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) { | |
|
| |
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) { | |
|
| |
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 { | |
|
| |
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)
- ...