package com.lovo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class WeatherServer {
private static class ClientHandler implements Runnable {
private Socket client;
public ClientHandler(Socket client) {
this.client = client;
}
@Override
public void run() {
try {
InputStream in = client.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String cityName = br.readLine();
WeatherInfo tempInfo = wInfo.get(cityName);
if(tempInfo != null) {
OutputStream out = client.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(out);
oos.writeObject(tempInfo);
}
}
catch(Exception e) {
e.printStackTrace();
}
finally {
if(client != null) {
try {
client.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
private static ExecutorService service = Executors.newFixedThreadPool(10);
private static Map<String,WeatherInfo> wInfo = new HashMap<String,WeatherInfo>();
static {
wInfo.put("北京", new WeatherInfo("雾", 0, 10, 25, 450));
wInfo.put("上海", new WeatherInfo("阴", 12, 15, 40, 360));
wInfo.put("广州", new WeatherInfo("晴", 25, 30, 100, 150));
}
public static void main(String[] args) {
ServerSocket server = null;
try {
server = new ServerSocket(9527);
while(true) {
Socket socket = server.accept(); // 连接成功后剩下的都是IO操作
service.execute(new ClientHandler(socket));
}
}
catch(Exception e) {
e.printStackTrace();
}
finally {
if(server != null) {
try {
server.close();
service.shutdown();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
package com.lovo.practise;
public class WeatherInfo {
private String status; // 天气情况
private int lowerTem; // 最低温度
private int upperTem; // 最高温度
private int hum; // 湿度
private int pm; // PM值(particulate matter)
public WeatherInfo(String status, int lowerTem, int upperTem, int hum,
int pm) {
this.status = status;
this.lowerTem = lowerTem;
this.upperTem = upperTem;
this.hum = hum;
this.pm = pm;
}
@Override
public String toString() {
String str = status + "\r\n" + "温度: " + lowerTem + "-"
+ upperTem + "℃\r\n" + "湿度: " + hum + "%\r\n" + "空气质量: ";
if(pm <= 35) {
str += "优";
}
else if(pm <= 75) {
str += "良";
}
else if(pm <= 150) {
str += "中度污染";
}
else {
str += "重度污染";
}
return str;
}
}
package com.lovo;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class WeatherClient {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Socket client = null;
try {
client = new Socket("192.168.1.108", 9527);
System.out.print("请输入要查询的城市: ");
String cityName = sc.nextLine().trim();
OutputStream out = client.getOutputStream();
PrintStream ps = new PrintStream(out);
ps.println(cityName);
InputStream in = client.getInputStream();
ObjectInputStream ois = new ObjectInputStream(in);
WeatherInfo tempInfo = (WeatherInfo) ois.readObject();
if(tempInfo != null) {
System.out.println(tempInfo);
}
}
catch(Exception e) {
System.out.println("没有该城市的数据");
}
finally {
if(client != null) {
try {
client.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
sc.close();
}
}