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();
            }
        }

    }
}
时间: 2024-10-09 09:01:36

03_天气查询_socket方式模拟_多线程方式的相关文章

02_天气查询_socket方式模拟

[远程请求的B/S模式(客户端/服务器)] TCP: 是一种传输层协议,一种面向连接的协议.经过三次握手客户端和服务器端连接一个连接(通道).提供可靠的数据传输,该协议一般服务质量要求比较高的情况,TCP支持的应用层协议主要有:Talnet.FTP.SMTP.HTTP等. UDP:是一种传输层协议,是一种数据报协议,速度是很快的,不稳定的.它是面向非连接的协议,它不与对方建立连接,直接就把数据包发送出去.属于面向事务的简单不可靠信息传输服务.UDP支持的应用层协议主要有:NFS(网络文件系统).

全网、全国最好用的基于经纬度的天气查询、天气预报接口

大家好,我们是中国科学院资源与环境信息系统国家重点实验室的人员(学生).在软件开发过程中,我们发现,传统获取天气信息的接口大多是基于所谓的天气码,数据源大多来自中国国家气象局:随着移动互联网的快速发展,大家都希望通过经纬度查询天气信息. 最开始我们搜寻全网,发现谷歌提供了利用经纬度获取天气信息的接口,然而一测试发现,由于“你懂的”原因,它已经无法使用了.国内IT三哥——百度貌似也提供了这么一个接口,但是又是需要神马key啊,验证文件啊等等一堆手续:而且它还限制每天的单个IP的访问次数,更让人讨厌

黑马程序员_多线程

------- android培训.java培训.期待与您交流! ---------- 多线程1.进程: 正在运行的程序所占有的内存空间,叫做进程. 线程: 一个应用程序中的子程序,对于CPU,子程序可以有一条独立的执行路径,称为线程. 线程特点:依靠一个应用程序,对于其他子程序,独立被CPU执行的2.多线程的好处: 充分利用CPU的资源,程序的同时运行,提高效率3.java中线程创建的两种方法: 第一种: 定义类继承Thread class extends Thread 重写Thread中的r

黑马程序员_JavaSE学习总结第23天_多线程1

------- android培训.java培训.期待与您交流! ----------  23.01  多线程程序的引入 如果一个程序只有一个执行流程,所以这样的程序就是单线程程序. 如果一个程序有多条执行流程,那么,该程序就是多线程程序. 23.02  进程概述及多进程的意义 要想说线程,首先必须得知道进程,因为线程是依赖于进程存在的 进程:正在运行的程序,是系统进行资源分配和调用的独立单位.每一个进程都有它自己的内存空间和系统资源.   多进程意义:多进程的作用不是提高执行速度,而是提高CP

微信百度天气查询

想在微信上做个天气预报查询功能,发现百度api还挺好用的.简单介绍下 /** * WxDaoImpl * * @author xuyw * @email [email protected] * @date 2014-06-22 */ 1.接口说明 2.接口示例 3.接口参数说明 4.返回结果 5.返回xml格式的数据 6.返回json格式的数据 接口说明 根据经纬度/城市名查询天气的结果 接口示例 http://api.map.baidu.com/telematics/v3/weather?lo

天气查询接口文档

天气查询接口演示代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.Net; using System.IO; using System.IO.Compression; using Sy

天气查询接口演示代码

天气查询接口演示代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net.Security;using System.Security.Cryptography.X509Certificates;using System.Net;using System.IO;using System.IO.Compression;using System.Text.

天气查询接口演示示例

天气查询接口演示代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.Net; using System.IO; using System.IO.Compression; using Sy

天气查询接口

天气查询接口演示代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net.Security;using System.Security.Cryptography.X509Certificates;using System.Net;using System.IO;using System.IO.Compression;using System.Text.