当前位置:首页 > 行业动态 > 正文

安卓开发怎么连接云服务器

前置条件准备

  1. 云服务器配置

    安卓开发怎么连接云服务器  第1张

    • 拥有公网IP的云服务器(如阿里云ECS、酷盾安全CVM等)
    • 开放所需端口(如80/443/8080等)
    • 部署可访问的服务(如REST API、WebSocket服务等)
  2. 安卓端权限配置
    AndroidManifest.xml中添加网络权限:

    <uses-permission android:name="android.permission.INTERNET" />

连接方式选择

场景 协议 适用场景 常用库
简单数据交互 HTTP/HTTPS REST API调用 HttpURLConnectionOkHttpRetrofit
实时通信 WebSocket 聊天、推送 OkHttp WebSocket、Socket.IO
文件传输 FTP/SFTP 大文件上传下载 Apache Commons Net

HTTP请求实现步骤

使用HttpURLConnection发送GET请求

// 异步任务避免阻塞主线程
new Thread(() -> {
    try {
        URL url = new URL("https://your-server.com/api/data");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");
        connection.connect();
        int responseCode = connection.getResponseCode();
        if (responseCode == 200) {
            InputStream inputStream = connection.getInputStream();
            // 解析输入流(如JSON)
        } else {
            // 处理错误码
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}).start();

使用OkHttp发送POST请求(推荐)

OkHttpClient client = new OkHttpClient();
RequestBody body = RequestBody.create(
    MediaType.parse("application/json"), "{"key":"value"}");
Request request = new Request.Builder()
    .url("https://your-server.com/api/upload")
    .post(body)
    .build();
client.newCall(request).enqueue(new Callback() {
    @Override public void onFailure(Call call, IOException e) {
        // 处理失败
    }
    @Override public void onResponse(Call call, Response response) throws IOException {
        if (response.isSuccessful()) {
            String result = response.body().string();
            // 处理返回数据
        }
    }
});

数据解析与安全

JSON解析(推荐Gson

Gson gson = new Gson();
String json = "{"name":"John", "age":30}";
Person person = gson.fromJson(json, Person.class); // 自动映射到Java对象

HTTPS配置(必选)

  • 在服务器部署SSL证书(如Let’s Encrypt免费证书)
  • 安卓端自动信任权威CA签发的证书
  • 自签名证书需手动添加到信任列表:
    // 示例:信任自签名证书(仅限开发环境)
    CertificatePinner certificatePinner = new CertificatePinner.Builder()
      .add("your-server.com", "sha256/abcdef...") // 替换为证书哈希值
      .build();
    connection.setCertificatePinner(certificatePinner);

常见问题与解决方案

问题 原因 解决方案
连接超时 网络不稳定/服务器响应慢 设置超时参数:connection.setConnectTimeout(10,000)
SSL握手失败 证书未信任/协议不匹配 检查证书有效性,强制启用TLS1.2:connection.setSSLSocketFactory(...)
CORS跨域问题 服务器未开放跨域 服务器端设置Access-Control-Allow-Origin

完整示例:登录功能实现

服务器端API示例(Node.js)

const express = require('express');
const app = express();
app.use(express.json());
app.post('/login', (req, res) => {
    const { username, password } = req.body;
    if (username === 'admin' && password === '123456') {
        res.json({ token: 'abcdef' });
    } else {
        res.status(401).json({ error: 'Unauthorized' });
    }
});
app.listen(3000);

安卓端实现

// 创建请求体
JSONObject json = new JSONObject();
json.put("username", "admin");
json.put("password", "123456");
RequestBody body = RequestBody.create(
    MediaType.parse("application/json"), json.toString());
// 发送POST请求
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
    .url("https://your-server.com/login")
    .post(body)
    .build();
client.newCall(request).enqueue(new Callback() {
    @Override public void onFailure(Call call, IOException e) {
        // 显示网络错误
    }
    @Override public void onResponse(Call call, Response response) throws IOException {
        if (response.isSuccessful()) {
            String responseBody = response.body().string();
            // 解析token并存储
        } else {
            // 处理错误(如401)
        }
    }
});

相关问题与解答

Q1:如何选择合适的云服务器类型?

A:根据需求选择:

  • 计算型:高CPU(如视频渲染)
  • 存储型:大硬盘(如文件存储)
  • 通用型:平衡性能和成本(如小型API服务)
    推荐新手从共享型服务器(如阿里云突发性能实例)开始。

Q2:如何传输大文件(如视频)?

A:方案对比:
| 方案 | 优点 | 缺点 | 适用场景 |
|——|——|——|———-|
| 分片上传 | 支持断点续传 | 实现复杂 | 大文件(>100MB) |
| 云存储SDK | 集成方便 | 依赖厂商 | 使用阿里云OSS/酷盾安全COS |
| WebSocket | 实时性高 | 消耗长连接 | 实时传输(如直播)

0