1.服务端代码:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/*
* 天气服务端
*/
public class WeatherServer {
public static void main(String[] args) throws IOException{
// 1.创建ServerSocket对象
ServerSocket serverSocket = new ServerSocket(12345);
while(true){
// 2.等待客户端连接,阻塞的方法
final Socket socket = serverSocket.accept();
Runnable runnable = new Runnable() {
@Override
public void run() {
try{
// 3.使用输入流接受客户端发送的请求
DataInputStream dis = new DataInputStream(socket.getInputStream());
String cityName = dis.readUTF();
System.out.println("接收到客户端发送的请求: " + cityName);
Thread.sleep(1000);
// 4.根据城市名查询天气
String result = "今天天气很冷";
System.out.println("返回天气信息: " + result);
// 5.返回查询结果,使用输出流。
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
dos.writeUTF(result);
// 6.关闭流
dis.close();
dos.close();
}catch(Exception e){
e.printStackTrace();
}
}
};
//启动线程
new Thread(runnable).start();
}
}
}
2.客户端代码:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
/*
* 天气客户端
*/
public class WeatherClient {
public static void main(String[] args) throws UnknownHostException,IOException {
//1.创建Socket对象,和服务端建立连接
Socket socket = new Socket("127.0.0.1", 12345);
//2.发送城市名称
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
dos.writeUTF("北京");
System.out.println("请求查询天气: 北京");
//3.接受返回结果使用输入流
DataInputStream dis = new DataInputStream(socket.getInputStream());
String result = dis.readUTF();
System.out.println("北京的天气:"+result);
//4.关闭流
dis.close();
dos.close();
}
}
3.先运行服务端,再运行客户端:
客户端输出:
服务端输出: