• 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();
                }
            }
            
        }
    }
  • 相关阅读:
    移动端touch事件获取事件坐标
    详解webpack中的hash、chunkhash、contenthash区别
    textarea placeholder 设置主动换行
    js-xlsx的使用
    关于Blob对象的介绍与使用
    spring boot zuul集成kubernetes等第三方登录
    Spring Boot 获取yaml配置文件信息
    spring boot @Value源码解析
    java.lang.StackOverflowError解决
    Jpa 重写方言dialect 使用oracle / mysql 数据库自定义函数
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5832942.html
Copyright © 2020-2023  润新知