android socket通讯 写法
时间: 2023-07-26 17:03:41 浏览: 57
Android 中使用 Socket 进行通讯可以分为服务端和客户端两种角色,下面分别介绍它们的写法:
### 服务端
服务端需要监听一个端口,并在有客户端连接时接受客户端的请求并返回响应。以下是服务端的基本写法:
```java
try {
// 创建一个 ServerSocket 对象,指定监听的端口号
ServerSocket serverSocket = new ServerSocket(8888);
Log.d("Server", "Server started: " + serverSocket);
while (true) {
// 接受客户端的连接请求,返回一个 Socket 对象
Socket clientSocket = serverSocket.accept();
Log.d("Server", "Client connected: " + clientSocket);
// 从输入流中读取客户端发送的数据
InputStream inputStream = clientSocket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String request = reader.readLine(); // 读取一行数据
// 向输出流中写入响应数据
OutputStream outputStream = clientSocket.getOutputStream();
outputStream.write("Hello, client!\n".getBytes());
// 关闭连接
clientSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
```
### 客户端
客户端需要连接到服务端指定的端口,并向服务端发送请求并接收响应。以下是客户端的基本写法:
```java
try {
// 创建一个 Socket 对象,指定服务端的 IP 地址和端口号
Socket socket = new Socket("server-ip-address", 8888);
Log.d("Client", "Connected to server: " + socket);
// 向输出流中写入请求数据
OutputStream outputStream = socket.getOutputStream();
outputStream.write("Hello, server!\n".getBytes());
// 从输入流中读取服务端的响应数据
InputStream inputStream = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String response = reader.readLine(); // 读取一行数据
Log.d("Client", "Response from server: " + response);
// 关闭连接
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
```
注意,在 Android 中访问网络需要在 AndroidManifest.xml 中声明网络访问权限:`<uses-permission android:name="android.permission.INTERNET" />`。