主流通信方式及实现
HTTP/HTTPS协议(RESTful API)
适用场景:数据交互(如登录验证、获取用户信息)。
实现步骤:
-
Android端(使用OkHttp或Retrofit库):
// 使用OkHttp发送GET请求 val client = OkHttpClient() val request = Request.Builder().url("https://your-server.com/api/data").build() client.newCall(request).enqueue(object : Callback { override fun onResponse(call: Call, response: Response) { val jsonData = response.body?.string() // 解析JSON数据(如Gson库) } override fun onFailure(call: Call, e: IOException) { // 处理网络错误 } })
-
Linux服务器端(Nginx + Python Flask示例):
from flask import Flask, jsonify app = Flask(__name__) @app.route('/api/data', methods=['GET']) def get_data(): return jsonify({"status": "success", "data": "Hello from Linux!"}) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
关键配置:
- 服务器部署HTTPS(使用Let’s Encrypt免费证书)。
- 数据格式推荐JSON(轻量且易解析)。
Socket通信(TCP/UDP)
适用场景:实时交互(如聊天应用、游戏数据传输)。
实现步骤:
-
Android端(TCP客户端):
Thread { try { val socket = Socket("192.168.1.100", 8080) // 服务器IP和端口 val output = socket.getOutputStream() output.write("Hello Server".toByteArray()) output.flush() socket.close() } catch (e: Exception) { e.printStackTrace() } }.start()
-
Linux服务器端(Python TCP服务端):
import socket server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('0.0.0.0', 8080)) server_socket.listen(5) while True: client_socket, addr = server_socket.accept() data = client_socket.recv(1024) print(f"Received: {data.decode()}") client_socket.send("ACK".encode()) client_socket.close()
注意:
- UDP适用于低延迟但允许丢包的场景(如视频流)。
- 需处理防火墙(开放端口:
sudo ufw allow 8080/tcp
)。
SSH/SFTP(安全文件传输与命令执行)
适用场景:服务器管理、文件上传/下载。
实现步骤:
-
Android端(使用JSch库):
// build.gradle添加依赖 implementation 'com.jcraft:jsch:0.1.55'
// 执行远程命令 val jsch = JSch() val session = jsch.getSession("user", "192.168.1.100", 22) session.setPassword("password") session.setConfig("StrictHostKeyChecking", "no") session.connect() val channel = session.openChannel("exec") (channel as ChannelExec).setCommand("ls -l") channel.connect() // 获取命令输出 val inputStream = channel.inputStream val result = inputStream.bufferedReader().use { it.readText() } channel.disconnect() session.disconnect()
安全建议:
- 使用密钥认证替代密码(生成SSH密钥对)。
- 限制服务器用户权限。
安全性最佳实践
- HTTPS加密:
- 避免使用HTTP,通过TLS防止中间人攻击。
- 在Android中配置证书固定(Certificate Pinning)。
- 认证与授权:
- 使用OAuth 2.0或JWT(JSON Web Tokens)验证用户身份。
- 服务器端校验请求来源(如API Key)。
- 数据安全:
- 敏感数据使用AES加密传输。
- 避免在代码中硬编码密钥(使用Android Keystore)。
性能优化技巧
- 异步处理:
- Android端使用
AsyncTask
、Coroutines
或RxJava
,避免阻塞主线程。
- Android端使用
- 连接复用:
- HTTP通信启用连接池(OkHttp默认支持)。
- 服务器端使用Keep-Alive(Nginx配置:
keepalive_timeout 60s;
)。
- 数据压缩:
- HTTP请求头添加
Accept-Encoding: gzip
。 - 服务器启用Gzip压缩(Nginx配置:
gzip on;
)。
- HTTP请求头添加
常见问题与解决方案
问题 | 解决方案 |
---|---|
连接超时 | 检查防火墙/路由设置;优化超时时间(OkHttp: .connectTimeout(10, TimeUnit.SECONDS) ) |
JSON解析失败 | 使用try-catch处理异常;校验数据格式(如JSONLint) |
HTTPS证书错误 | 检查证书有效性;Android 7+需配置Network Security Config |
服务器拒绝连接 | 确认IP/端口开放;Linux运行netstat -tuln 检查监听状态 |
技术选型建议
- 简单数据交互 → HTTP/HTTPS + RESTful API
- 实时应用 → TCP Socket(需自定义协议)
- 文件/服务器管理 → SSH/SFTP
- 高并发场景 → WebSocket(如Socket.IO库)
引用说明:
- OkHttp:Square开源的HTTP客户端(官网)
- JSch:Java实现的SSH2库(GitHub)
- Let’s Encrypt:免费HTTPS证书(官网)
- OWASP安全指南:移动通信安全标准(文档)
通过合理选择通信协议、严格实施安全措施并优化性能,可构建高效可靠的Android-Linux通信系统,实际开发中需根据场景权衡实时性、安全性与开发成本。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7207.html