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

安卓创建客户端连接服务器

配置网络权限,用HttpURLConnection/OkHttp创建连接,指定服务器IP与端口,异步处理

安卓客户端连接服务器的实现步骤与方法


配置网络权限

AndroidManifest.xml 中声明网络权限,否则应用无法进行网络通信。

安卓创建客户端连接服务器  第1张

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

选择网络协议

根据需求选择协议:
| 协议 | 适用场景 |
|—————-|—————————————————————————–|
| HTTP/HTTPS | 常规请求(如API调用、文件下载) |
| WebSocket | 实时双向通信(如聊天、推送通知) |
| TCP/UDP | 底层自定义协议(需手动处理数据包) |


HTTP请求实现

工具库选择

  • OkHttp:轻量级、高效,支持同步/异步请求。
  • Retrofit:基于OkHttp,提供RESTful API的声明式调用。

OkHttp示例(GET请求)

// 添加依赖(build.gradle)
implementation 'com.squareup.okhttp3:okhttp:4.9.3'
// 代码示例
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
    .url("https://api.example.com/data")
    .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();
            // 处理成功逻辑
        } else {
            // 处理非200状态码
        }
    }
});

Retrofit示例(POST请求)

// 添加依赖(build.gradle)
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
// 定义接口
public interface ApiService {
    @POST("user/login")
    Call<LoginResponse> login(@Body LoginRequest request);
}
// 使用Retrofit
Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.example.com/")
    .addConverterFactory(GsonConverterFactory.create())
    .build();
ApiService apiService = retrofit.create(ApiService.class);
Call<LoginResponse> call = apiService.login(new LoginRequest("username", "password"));
call.enqueue(new Callback<LoginResponse>() {
    @Override public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
        // 处理响应
    }
    @Override public void onFailure(Call<LoginResponse> call, Throwable t) {
        // 处理失败
    }
});

WebSocket通信

工具库选择

  • Java-WebSocket:轻量级WebSocket客户端库。
  • OkHttp WebSocket:支持WebSocket的OkHttp。

Java-WebSocket示例

// 添加依赖(build.gradle)
implementation 'org.java-websocket:Java-WebSocket:1.5.3'
// 代码示例
URI serverUri = new URI("wss://echo.websocket.org");
WebSocketClient client = new WebSocketClient(serverUri) {
    @Override public void onOpen(ServerHandshake handshake) {
        // 连接成功
        send("Hello, WebSocket!");
    }
    @Override public void onMessage(String message) {
        // 接收消息
        Log.d("WebSocket", "Received: " + message);
    }
    @Override public void onClose(int code, String reason, boolean remote) {}
    @Override public void onError(Exception ex) {}
};
client.connect();

安全性处理

  • HTTPS强制校验:确保服务器部署有效SSL证书。
  • 自签名证书信任:开发阶段可临时绕过校验(仅限测试环境)。
    // 信任所有证书(仅测试用)
    OkHttpClient client = new OkHttpClient.Builder()
      .sslSocketFactory(new TrustAllCertificates(), new X509TrustManager() {...})
      .hostnameVerifier((hostname, session) -> true)
      .build();

错误处理与日志

  • 常见错误:网络不可用、超时、SSL异常、服务器返回非200状态码。
  • 日志记录:使用 Logcat 或第三方库(如 Timber)记录网络日志。
    // 示例:捕获超时异常
    try {
      Response response = client.newCall(request).execute();
    } catch (IOException e) {
      if (e instanceof SocketTimeoutException) {
          Log.e("Network", "请求超时");
      } else {
          Log.e("Network", "网络错误: " + e.getMessage());
      }
    }

单元测试

  • 模拟网络响应:使用 MockitoRobolectric 模拟服务器返回。
    // 示例:Mock Retrofit接口
    ApiService apiService = mock(ApiService.class);
    when(apiService.login(any())).thenReturn(new Response<>());

相关问题与解答

问题1:如何优化安卓网络请求的性能?

  • 答案
    1. 缓存:使用本地缓存(如Room数据库)或HTTP缓存头(如Cache-Control)。
    2. 压缩:启用GZIP压缩减少数据传输量。
    3. 分页加载:对大数据集采用分页请求(如PAGE_SIZE=50)。
    4. 并发限制:通过线程池或RxJava控制并发请求数。

问题2:如何处理多线程下的并发网络请求?

  • 答案
    1. 线程池管理:使用 ExecutorServiceOkHttp 的内置线程池。
    2. 同步机制:对共享资源(如单例Retrofit实例)使用 synchronizedConcurrentHashMap
    3. 回调隔离:确保每个请求的回调逻辑独立,避免交叉
0