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方式模拟_多线程方式的更多相关文章
- 02_天气查询_socket方式模拟_单线程
[远程请求的B/S模式(客户端/服务器)] TCP: 是一种传输层协议,一种面向连接的协议.经过三次握手客户端和服务器端连接一个连接(通道).提供可靠的数据传输,该协议一般服务质量要求比较高的情况,T ...
- 05_天气查询_JAX-WS方式_客户端
[客户端特点] 支持面向对象开发. 客户端功能调用webService,首先得知道WebService的地址. 一般情况下,只要知道了wsdl的地址,就可以知道WebService的地址. 我们上一篇 ...
- Java oop 第13章_多线程
第13章_多线程 一. 多线程相关的概念: 程序:由某种编程语言开发可执行某些功能的代码组合,它是静态的概念. 进程:当程序被执行时的过程可以理解为讲程序从外存调入内存的过程,会为每一个程序 ...
- 天气查询SDK
简介: 这是一个用于查询天气的SDK,在很多时候,尤其是对接多而小功能公众账号的时候,天气查询比较使用,此SDK就是这样的用途,使用的是中国天气网的API,已经集成了网上最靠谱的方式来实现,包括里面的 ...
- JavaSE学习总结第23天_多线程1
23.01 多线程程序的引入 如果一个程序只有一个执行流程,所以这样的程序就是单线程程序. 如果一个程序有多条执行流程,那么,该程序就是多线程程序. 23.02 进程概述及多进程的意义 要想说 ...
- Android解析中国天气接口JSon数据,应用于天气查询!
android解析Json数据是比较常见的一种操作.也是客户端和服务器进行数据交互的桥梁.下面就来看一看在android中解析JSon数据的方法吧. 首先要想获得Json数据,就必须访问相关的网络接口 ...
- 小工具:天气查询 Vs自定义设置 DevGridControl中GridView排序问题 小工具:火车票查询 小工具:邮件发送 小工具:截图&简单图像处理
小工具:天气查询 开发一个天气查询的工具主要由两步构成,一是数据的获取,二是数据的展示. 一.数据获取 数据获取又可以分为使用其它公司提供的API和手动抓取其它网站数据. 1. 某公司提供的AP ...
- 个人永久性免费-Excel催化剂功能第96波-地图数据挖宝之全国天气查询(区域最细可到区县,最长预报4天)
天气预报的信息,是很普通的大家习以为常的信息,但如果不进行采集,在日常数据分析过程中,就少了非常重要的一个分析维度,如果人手采集整理,工作量巨大.此篇给广大数据分析工作者再次减负,只需简单一键,即可批 ...
- 【Postman】举例实战——天气查询
准备工作: 1.下载postman(搜索官网下载即可) 2.接口文档(以聚合上去免费API:天气查询接口) 打开postman: 1.输入url 2.请求方式 3.请求参数 4.在postman中运行 ...
随机推荐
- POJ1155 - TELE(树形DP)
题目大意 电视台要直播一场比赛,电视网络刚好形成了一棵树,其中有M个为客户端,其他的为中转站,其中中转站与中转站以及中转站与客户端之间连接都需要一定费用,每个客户i愿意支付pay[i]元钱,问电视台在 ...
- nyoj 27 水池数目
水池数目 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 南阳理工学院校园里有一些小河和一些湖泊,现在,我们把它们通一看成水池,假设有一张我们学校的某处的地图,这个地 ...
- [Openstack][Grizzly] Mysql删除僵尸实例
由于某些原因,导致在通过nova delete删除虚拟机后,其task_state 一致处于deleting状态, 但是始终无法删除.由于虚拟机还没有分配到节点等信息,还没有拷贝镜像,所以可以直接从数 ...
- ros和Android(一)
ros和Android :first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { ...
- CAS SSO对手机应用支持的一种思路
原文地址: http://architecture3.riaos.com/?p=3095368 手机和桌面应用访问CAS,我们不能直接使用CAS提供的web api.不过CAS提供了一个插件,叫CAS ...
- JAVA中List转换String,String转换List,Map转换String,String转换Map之间的转换类
<pre name="code" class="java"></pre><pre name="code" cl ...
- hello world是怎样运行的?
关于<深入理解计算机系统> “这本书的中译名为“深入理解计算机系统”,我非常,十分,以及百分之一百二十地不满意.我这么说的原因在于这个译法完全扭曲了书的本意.如果直译原书名,应该是类似于“ ...
- EL表达式中的“+-x/”四种运算符和条件,比较运算符等
<%@page import="cn.hncu.domain.User"%><%@ page language="java" import=& ...
- Android 自学之线性布局 LinearLayout
线性布局(LinearLayout),线性布局有点想AWT编程里面的FolwLayout,他们都会将容器里面的组件挨个的排列起来. 他们最大的区别在于:Android的线性布局不会换行:AWT里面的F ...
- Python 基础【第二篇】python操作模式
一.交互模式 #python Python 2.6.6 (r266:84292, Jan 22 2014, 09:42:36) [GCC 4.4.7 20120313 (Red Hat 4.4.7-4 ...