编写程序代码,实现 Android Studio 创建 Socket 客户端与服务器通信。 并在“发送数据”按键下方,显示接收到信息的:1.年月日时分秒。2.经度。3.维度。详细步骤及代码
时间: 2024-10-09 15:11:30 浏览: 81
在Android Studio中创建Socket客户端与服务器通信,你需要做以下几步:
1. **添加依赖**:
首先,确保你已经导入了`java.net`包来使用Socket API。如果你使用的是Gradle构建系统,可以在app-level的build.gradle文件中添加以下库:
```groovy
implementation 'org.apache.httpcomponents:httpclient-android:4.5.13'
```
2. **设置服务器连接**:
在客户端代码中,创建一个Socket对象并连接到服务器地址和端口。这里假设服务器地址是`localhost`,端口号是`8080`。注意,实际应用中需要替换为你服务器的实际IP和端口。
```java
private static final String SERVER_ADDRESS = "localhost";
private static final int SERVER_PORT = 8080;
private Socket socket = null;
// ...
public void connectToServer() {
try {
socket = new Socket(SERVER_ADDRESS, SERVER_PORT);
} catch (IOException e) {
Log.e("SocketClient", "Failed to connect: " + e.getMessage());
}
}
```
3. **发送数据**:
当用户点击"发送数据"按钮,你可以准备一条包含日期、经度和纬度的数据,并通过OutputStream发送。
```java
public void sendData() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date currentDate = Calendar.getInstance().getTime();
String data = dateFormat.format(currentDate) + ", " + yourLongitude + ", " + yourLatitude; // 假设yourLongitude和yourLatitude有实际值
try {
OutputStream outputStream = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(outputStream);
dos.writeUTF(data); // 使用UTF-8编码发送字符串
dos.flush(); // 确保数据已发送
} catch (IOException e) {
Log.e("SocketClient", "Failed to send data: " + e.getMessage());
}
}
```
4. **接收数据并显示**:
在后台线程里监听输入流,当有数据接收时解析数据并更新UI显示。
```java
private Thread readerThread = new Thread(new Runnable() {
@Override
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String receivedData;
while ((receivedData = br.readLine()) != null) {
// 解析接收到的数据
String[] parts = receivedData.split(",");
displayTimeAndCoordinates(parts[0], parts[1], parts[2]);
}
} catch (IOException e) {
Log.e("SocketClient", "Failed to read from server: " + e.getMessage());
}
}
});
private void displayTimeAndCoordinates(String time, String longitude, String latitude) {
// 在UI线程更新显示
runOnUiThread(() -> textView结果显示时间、经度和纬度);
}
public void startReadingFromServer() {
readerThread.start();
}
```
记得关闭Socket连接,如在Activity的onDestroy方法或合适的地方调用`socket.close()`。
阅读全文