02_天气查询_socket方式模拟

【远程请求的B/S模式(客户端/服务器)】

  TCP: 是一种传输层协议,一种面向连接的协议。经过三次握手客户端和服务器端连接一个连接(通道)。提供可靠的数据传输,该协议一般服务质量要求比较高的情况,TCP支持的应用层协议主要有:Talnet、FTP、SMTP、HTTP等。

  UDP:是一种传输层协议,是一种数据报协议,速度是很快的,不稳定的。它是面向非连接的协议,它不与对方建立连接,直接就把数据包发送出去。属于面向事务的简单不可靠信息传输服务。UDP支持的应用层协议主要有:NFS(网络文件系统)、SNMP(简单网络管理协议)、DNS(主域名称系统)、TFTP(通用文件传输协议)。

  由于TCP协议具有的可靠性的特点,本功能最终采用TCP通信方式,客户端向服务端发送请求,查询天气信息。

【Socket发送和接受数据请求】

【工程截图】

【服务端WeatherServer.java】

package com.Higgin.socket;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class WeatherServer {

    public static void main(String[] args) throws IOException {
        //创建天气服务
        //应用服务端口建议在10000以上
        ServerSocket serverSocket=new ServerSocket(12345);
        System.out.println("启动天气查询服务....");

        Socket socket=null;
        DataInputStream dataInputStream=null;
        DataOutputStream dataOutputStream=null;
        try {
            //接受客户端链接
            socket =serverSocket.accept();

            //接受客户端的而请求数据
            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{
            //释放资源
            dataInputStream.close();
            dataOutputStream.close();
            //服务端一般不主动关闭服务,由客户端来关闭
        }
    }
}

【客户端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;
        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();
        }
    }
}

【运行结果】

1.先启动服务端:

2.然后启动客户端

3.再回头看服务端(此时已由客户端关闭服务)

时间: 2024-10-09 09:01:33

02_天气查询_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.So

微信百度天气查询

想在微信上做个天气预报查询功能,发现百度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

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

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

天气查询接口

天气查询接口演示代码: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.

Android 身份证号码查询、手机号码查询、天气查询

1.基本信息 身份证号码查询:http://apistore.baidu.com/apiworks/servicedetail/113.html 手机号码:http://apistore.baidu.com/apiworks/servicedetail/117.html 天气查询http://apistore.baidu.com/apiworks/servicedetail/112.html 2.运行效果       

微名汇-微信公众平台功能开发(天气查询)

在这篇教程中,我们将介绍如何在微信公众平台上开发天气预报功能.我们将使用中国天气网的气象数据接口来获取天气信息 这篇教程将介绍以下内容: 获取中国天气网的气象数据 在微信公众平台中回复天气 微名汇:http://weixin.zgtuango.com 联系QQ:44653139 一.中国天气网 中国天气网提供了丰富的气象数据接口.下面我们介绍主要的几个: 国家根节点接口: http://flash.weather.com.cn/wmaps/xml/china.xml 该接口以XML格式列出所有的