码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-09-02 13:08:32      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

【简述】

要重视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方式模拟_多线程方式

标签:

原文地址:http://www.cnblogs.com/HigginCui/p/5832942.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!