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.再回头看服务端(此时已由客户端关闭服务)

【注意点】
使用Socket传输数据注意要关注下如何解析数据流。
02_天气查询_socket方式模拟_单线程的更多相关文章
- 03_天气查询_socket方式模拟_多线程方式
[简述] 要重视Socket开发,企业后台服务特长使用Socket. 1.服务端要有可持续运行能力,保证线程一致在运行 2.并发处理能力,使用多线程 [工程截图] [WeatherRunner.jav ...
- 05_天气查询_JAX-WS方式_客户端
[客户端特点] 支持面向对象开发. 客户端功能调用webService,首先得知道WebService的地址. 一般情况下,只要知道了wsdl的地址,就可以知道WebService的地址. 我们上一篇 ...
- 04_天气查询_JAX-WS方式_服务端
[简述] WebService的Java实现共有三种方式:JAX-WS(JAX-RPC).JAXM&SAAJ.JAX-RS. JAX-WS: JAX-WS 的全称为 Java API for ...
- 天气查询SDK
简介: 这是一个用于查询天气的SDK,在很多时候,尤其是对接多而小功能公众账号的时候,天气查询比较使用,此SDK就是这样的用途,使用的是中国天气网的API,已经集成了网上最靠谱的方式来实现,包括里面的 ...
- Android解析中国天气接口JSon数据,应用于天气查询!
android解析Json数据是比较常见的一种操作.也是客户端和服务器进行数据交互的桥梁.下面就来看一看在android中解析JSon数据的方法吧. 首先要想获得Json数据,就必须访问相关的网络接口 ...
- 小工具:天气查询 Vs自定义设置 DevGridControl中GridView排序问题 小工具:火车票查询 小工具:邮件发送 小工具:截图&简单图像处理
小工具:天气查询 开发一个天气查询的工具主要由两步构成,一是数据的获取,二是数据的展示. 一.数据获取 数据获取又可以分为使用其它公司提供的API和手动抓取其它网站数据. 1. 某公司提供的AP ...
- 个人永久性免费-Excel催化剂功能第96波-地图数据挖宝之全国天气查询(区域最细可到区县,最长预报4天)
天气预报的信息,是很普通的大家习以为常的信息,但如果不进行采集,在日常数据分析过程中,就少了非常重要的一个分析维度,如果人手采集整理,工作量巨大.此篇给广大数据分析工作者再次减负,只需简单一键,即可批 ...
- 案例_(单线程)使用xpath爬取糗事百科
案例_(单线程)使用xpath爬取糗事百科 步骤如下: 首先通过xpath插件找出我们要爬取的信息的匹配规则 url = "https://www.qiushibaike.com/8hr/p ...
- 【Postman】举例实战——天气查询
准备工作: 1.下载postman(搜索官网下载即可) 2.接口文档(以聚合上去免费API:天气查询接口) 打开postman: 1.输入url 2.请求方式 3.请求参数 4.在postman中运行 ...
随机推荐
- EM 算法
这个暂时还不太明白,先写一点明白的. EM:最大期望算法,属于基于模型的聚类算法.是对似然函数的进一步应用. 我们知道,当我们想要估计某个分布的未知值,可以使用样本结果来进行似然估计,进而求最大似然估 ...
- POJ 2115 C Looooops(扩展欧几里得)
辗转相除法(欧几里得算法) 时间复杂度:在O(logmax(a, b))以内 int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a ...
- Qt5.0.2无法发布问题
先从bin目录里面找到所缺失的dll,如果出现 可以找到libEGL.dll然后复制过来就可以了.
- MSSQLSERVER数据库- 判断全局临时表是否存在
写一下今天遇到的一个问题. 今天因为一些作用域的问题,我使用了全局临时表,然后我在存储过程里使用了这么一段语句,想判断全局临时表是否存在,如果不存在,则将他DROP掉. 可是这段语句没用. if ex ...
- SVProgressHUD 用法
SVProgressHUD 是一个第三方的控件,是一个弹出提示层,用来提示 网络加载 或 提示对错,看下面图,你就明白了: 那么,SVProgressHUD 都有什么特点呢: 1. 提示当 ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完毕測试代码)
MD5和RSA是网络传输中最经常使用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,仅仅能加密而不能解密. ...
- Safari浏览器Session问题
Safari浏览器中经常出现session无法写入或同一个会话中Session ID常变动的事情.尤其以iOS7版本居多. 问题本身并不难猜,应该就是cookie无法写入引起的.奇怪的是,部分同版本的 ...
- [欧拉] poj 2230 Watchcow
主题链接: http://poj.org/problem? id=2230 Watchcow Time Limit: 3000MS Memory Limit: 65536K Total Submi ...
- Spring3.0官网文档学习笔记(八)--3.4.3~3.4.6
3.4.3 使用depends-on 使用depends-on能够强制使一个或多个beans先初始化,之后再对这个bean进行初始化. 多个bean之间用","." ...
- ERROR 1114 (HY000): The table 'adv_date_tmp' is full(Mysql临时表应用)
场景:需要对现在数据库的数据进行批量的进行is_del=1的操作,但是遇到一个问题,在执行sql的时候发现sql不能在查询特定表的时候再嵌套查询来做update的操作,经过讨论,后续我们想到用临时表的 ...