Android ServerSocket 查看连接设备
在 Android 开发中,我们经常需要与其他设备进行通信。其中一种常见的方式是使用 ServerSocket 来创建一个服务器端,监听设备连接,并接收设备发送的数据。
本文将介绍如何使用 ServerSocket 在 Android 中查看连接设备,以及一些示例代码。
什么是 ServerSocket?
ServerSocket 是 Java 提供的一种用于创建服务器端的类。它可以在指定的端口上监听连接请求,并接受这些请求,从而与客户端进行通信。
在 Android 开发中,我们可以使用 ServerSocket 来创建一个 Android 设备上的服务器端,监听其他设备的连接请求,并接收发送的数据。
使用 ServerSocket 查看连接设备的步骤
要使用 ServerSocket 查看连接设备,我们需要按照以下步骤进行操作:
-
创建一个 ServerSocket 实例,并指定监听的端口号。
-
使用 accept() 方法等待连接请求,并接受这些请求。
-
使用输入流读取客户端发送的数据。
-
处理接收到的数据。
-
关闭连接,释放资源。
下面是一个简单的示例代码,演示了如何使用 ServerSocket 查看连接设备:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
// 创建 ServerSocket 实例,监听端口号为 8080
ServerSocket serverSocket = new ServerSocket(8080);
// 等待连接请求,并接受连接
Socket clientSocket = serverSocket.accept();
// 创建输入流,读取客户端发送的数据
BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
// 读取接收到的数据
String message = reader.readLine();
System.out.println("Received message: " + message);
// 处理接收到的数据
// 关闭连接,释放资源
reader.close();
clientSocket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上面的示例中,我们创建了一个 ServerSocket 实例,并指定监听的端口号为 8080。然后,使用 accept() 方法等待连接请求,并接受这些请求。接下来,我们创建一个 BufferedReader 对象来读取客户端发送的数据。然后,读取接收到的数据,并进行处理。最后,关闭连接,释放资源。
ServerSocket 示例应用
现在,让我们进一步完善上面的示例,以显示连接设备的信息,并使用饼状图展示连接设备的分布情况。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
public class Server {
public static void main(String[] args) {
try {
// 创建 ServerSocket 实例,监听端口号为 8080
ServerSocket serverSocket = new ServerSocket(8080);
// 用于统计连接设备的分布情况
Map<String, Integer> deviceCounts = new HashMap<>();
// 无限循环,等待连接请求
while (true) {
// 等待连接请求,并接受连接
Socket clientSocket = serverSocket.accept();
// 获取连接设备的 IP 地址
String deviceIp = clientSocket.getInetAddress().getHostAddress();
// 更新连接设备的统计信息
if (deviceCounts.containsKey(deviceIp)) {
deviceCounts.put(deviceIp, deviceCounts.get(deviceIp) + 1);
} else {
deviceCounts.put(deviceIp, 1);
}
// 创建输入流,读取客户端发送的数据
BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
// 读取接收到的数据
String message = reader.readLine();
System.out.println("Received message: " + message);
// 处理接收到的数据
// 关闭连接,释放资源
reader.close();
clientSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上面的示例中,我们添加了一个无限循环来持续等待连接请求。每当接受一个连接请求时,我们获取连接设备的 IP 地址,并更新连接设备的统计信息。我们使用一个 HashMap 对象来记录每个设备的连接次数。