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

Posted HigginCui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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方式模拟_多线程方式的主要内容,如果未能解决你的问题,请参考以下文章

Java千百问_02基本使用(012)_如何编写多线程Socket程序

day09_03 用类的方式多线程执行相同的事情

模拟的npm模块以开玩笑的方式返回空对象

阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_14_匿名内部类方式实现线程的创建

使用两种方式编写多线程程序?

03_线程的创建和启动_实现Runnable接口方式