首页 > 代码库 > 03_天气查询_socket方式模拟_多线程方式

03_天气查询_socket方式模拟_多线程方式

【简述】

要重视Socket开发,企业后台服务特长使用Socket。

1.服务端要有可持续运行能力,保证线程一致在运行

2.并发处理能力,使用多线程

【工程截图】

技术分享

 

【WeatherRunner.java】

package com.Higgin.socket.Runnable;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.Socket;/** * 执行天气的查询 * @author YH * */public class WeatherRunnable implements Runnable{    private Socket socket;    //通过构造方法注入Socket    public WeatherRunnable(Socket socket){        this.socket=socket;    }    @Override    public void run() {        DataInputStream dataInputStream=null;        DataOutputStream dataOutputStream=null;        try {                            //接受客户端的而请求数据            dataInputStream=new DataInputStream(socket.getInputStream());                        //客户端发送城市的名称            String cityName=dataInputStream.readUTF();            System.out.println("from client...."+cityName);                        //向客户端发送数据            dataOutputStream =new DataOutputStream(socket.getOutputStream());                        //查询天气信息            String  result="晴天";                        //向客户端回应            dataOutputStream.writeUTF(result);            System.out.println("to client..."+result);        } catch (Exception e) {            e.printStackTrace();        }finally{            //释放资源            try {                dataInputStream.close();                dataOutputStream.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }}

【WeatherServer.java】

package com.Higgin.socket;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import com.Higgin.socket.Runnable.WeatherRunnable;public class WeatherServer {        public static void main(String[] args) throws IOException {        //创建天气服务        //应用服务端口建议在10000以上            ServerSocket serverSocket=new ServerSocket(12345);        System.out.println("启动天气查询服务....");                Socket socket=null;        while(true){            try {                    //接受客户端链接                socket =serverSocket.accept();                                //开启一个新的线程,使用多线程的方式                new Thread(new WeatherRunnable(socket)).start();                                            } catch (Exception e) {                e.printStackTrace();            }        }    }}

【WeatherClient.java】

package com.Higgin.socket;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.Socket;public class WeatherClient {    public static void main(String[] args) throws IOException {                        //创建socket连接        Socket socket=null;        DataInputStream dataInputStream=null;        DataOutputStream dataOutputStream=null;        //模拟多次请求,实际上可以多编译运行几次,利用cmd        for(int i=0;i<100;i++){            try{                socket =new Socket("127.0.0.1",12345);                //向服务端发送数据                dataOutputStream =new DataOutputStream(socket.getOutputStream());                //城市名称                String cityName="北京";                dataOutputStream.writeUTF(cityName);                System.out.println("to Server.."+cityName);                //接受服务端的返回数据                dataInputStream=new DataInputStream(socket.getInputStream());                String result=dataInputStream.readUTF();                System.out.println("from server ..."+result);            }catch(Exception e){                e.printStackTrace();            }finally{                //释放资源                dataInputStream.close();                dataOutputStream.close();                socket.close();            }        }            }}

 

03_天气查询_socket方式模拟_多线程方式