使用Java通过socket编程获取网络上天气预报,并写出详细代码
时间: 2024-02-22 10:58:43 浏览: 18
好的,使用 Java 的 socket 编程获取网络上的天气预报可以分为以下步骤:
1. 连接天气预报服务器;
2. 发送请求报文;
3. 接收响应报文;
4. 解析响应报文。
下面是具体的代码实现:
```java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
public class WeatherServiceClient {
public static void main(String[] args) throws Exception {
// 1. 连接天气预报服务器
String host = "wthrcdn.etouch.cn";
int port = 80;
Socket socket = new Socket(host, port);
// 2. 发送请求报文
String request = "GET /weather_mini?city=北京 HTTP/1.1\r\n" +
"Host: wthrcdn.etouch.cn\r\n" +
"\r\n";
PrintWriter writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
writer.print(request);
writer.flush();
// 3. 接收响应报文
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
StringBuilder response = new StringBuilder();
while ((line = reader.readLine()) != null) {
response.append(line);
}
// 4. 解析响应报文
String responseBody = response.toString().split("\r\n\r\n")[1];
System.out.println(responseBody);
socket.close();
}
}
```
上述代码中,我们首先创建一个 Socket 对象 `socket`,并使用 `connect` 方法连接到天气预报服务器。然后,我们构造一个 HTTP GET 请求报文,并通过 `writer` 对象的 `print` 方法发送到服务器。
接着,我们使用一个 while 循环不断调用 `reader` 对象的 `readLine` 方法接收响应报文,直到接收完毕。最后,我们将响应报文转换为字符串类型,并截取出其中的响应主体部分,即天气预报数据。
注:这里的天气预报数据是以 JSON 格式返回的,需要使用 Java 的 JSON 库进行解析。另外,代码中的城市名为北京,可以根据实际需要修改。