Android socket通信教程:单APP实现服务器与客户端

9 下载量 116 浏览量 更新于2024-08-30 收藏 66KB PDF 举报
"Android中通过socket实现通信的基本步骤和代码示例" 在Android开发中,有时我们需要实现设备间的通信,socket通信是一种常见的选择。本资源主要介绍了如何在Android应用中简单实现socket通信,既可以将同一应用作为服务器和客户端,也可以单独创建服务器和客户端应用。 首先,为了进行网络通信,必须在AndroidManifest.xml文件中添加必要的权限声明,允许应用访问互联网。这是通过添加以下代码实现的: ```xml <uses-permission android:name="android.permission.INTERNET" /> ``` 接着,我们将构建服务器端。服务器端的主要任务是监听客户端的连接请求,并对连接请求做出响应。以下是一个简单的服务器端Java类`Server`的代码片段: ```java import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; public class Server { ServerSocket serverSocket = null; public final int port = 9998; public Server() { try { InetAddress addr = InetAddress.getLocalHost(); System.out.println("localhost: " + addr); serverSocket = new ServerSocket(port); System.out.println("Server started on port " + port); } catch (IOException e) { e.printStackTrace(); } } public void startService() { try { Socket socket = null; while (true) { socket = serverSocket.accept(); // 等待客户端连接,这是一个阻塞操作 System.out.println("Connected to " + socket.getInetAddress() + ":" + socket.getLocalPort()); new ClientThread(socket).start(); // 创建新线程处理客户端连接 } } catch (IOException e) { e.printStackTrace(); } } // ... } ``` 这里的`startService()`方法会不断监听9998端口的连接。当有客户端连接时,它会创建一个新的线程`ClientThread`来处理该连接,以避免阻塞主线程。 客户端通常需要连接到服务器并发送或接收数据。以下是一个简化的客户端示例: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class Client { public static void main(String[] args) { try { Socket socket = new Socket("服务器IP", 9998); // 连接到服务器 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); out.println("Hello, Server!"); // 发送消息到服务器 String response = in.readLine(); // 读取服务器的响应 System.out.println("Received from Server: " + response); in.close(); out.close(); socket.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 客户端会创建一个Socket对象,连接到服务器指定的IP地址和端口号,然后通过`PrintWriter`发送数据,通过`BufferedReader`接收数据。 在实际应用中,可能还需要处理异常、数据解析与编码、心跳检测等复杂情况。以上代码仅作为基础示例,实际开发时需要根据项目需求进行扩展和完善,确保数据传输的安全性、可靠性和效率。