湘潭营销网站建设,广西麒铭建设有限公司网站,制作网站推广,wordpress的友情链设置目录
学习目的
1. 对象的序列化
1.1 ObjectOutputStream 对象的序列化
1.2 ObjectInputStream 对象的反序列化
2. 软件结构
2.1 网络通信协议
2.1.1 TCP/IP协议参考模型
2.1.2 TCP与UDP协议
2.2 网络编程三要素
2.3 端口号
3. InetAddress类
4. Socket
5. TCP网络…目录
学习目的
1. 对象的序列化
1.1 ObjectOutputStream 对象的序列化
1.2 ObjectInputStream 对象的反序列化
2. 软件结构
2.1 网络通信协议
2.1.1 TCP/IP协议参考模型
2.1.2 TCP与UDP协议
2.2 网络编程三要素
2.3 端口号
3. InetAddress类
4. Socket
5. TCP网络编程
5.1 通信模型
5.2 开放步骤
5.2.1 服务器端
5.2.2 客户端
5.2.3 相关API 学习目的
了解网络通信协议参考模型能够理解IP地址和端口号的作用能够在程序中表示IP地址和端口号能够说出TCP和UDP网络协议的区别了解基于Socket的TCP网络编程了解基于Socket的UDP网络编程 1. 对象的序列化
对象的序列化的意义对象变成一个文件在网络中传递可以让任何一个人使用 1.1 ObjectOutputStream 对象的序列化 构造方法ObjectOutputStream(OutputStream out)传递字节输出流 void writeObject(Object o)写入对象 /*** 对象的序列化*/public static void writeObj()throws IOException {//创建字节输出流,绑定文件FileOutputStream fos new FileOutputStream(day20_2/person.txt);//对象的序列化流创建ObjectOutputStream oos new ObjectOutputStream(fos);//oos流,写入对象Person person new Person(张三,20);oos.writeObject(person);oos.close();}
1.2 ObjectInputStream 对象的反序列化 构造方法ObjectInputStream (InputStream out)传递字节输入流 Object readObject()读取对象
/*** 对象的反序列化* ois.readObject(); 类找不到异常 ClassNotFoundException* 没有class文件,抛出类找不到异常*/public static void readObj()throws Exception{//创建字节输入流,读取数据源文件 ,源文件必须是序列化后的文件FileInputStream fis new FileInputStream(day20_2/person.txt);//创建反序列化对象ObjectInputStream ois new ObjectInputStream(fis);//读取对象Object object ois.readObject();System.out.println(object);ois.close();} 2. 软件结构 C/S结构 全称为Client/Server结构是指客户端和服务器结构。常见程序有、红蜘蛛、飞秋等软件。 B/S结构 全称为Browser/Server结构是指浏览器和服务器结构。常见浏览器有IE、谷歌、火狐等。 两种架构各有优势但是无论哪种架构都离不开网络的支持。网络编程就是在一定的协议下实现两台计算机的通信的程序。
2.1 网络通信协议
2.1.1 TCP/IP协议参考模型 网络通信协议通过计算机网络可以使多台计算机实现连接位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中这些连接和通信的规则被称为网络通信协议它对数据的传输格式、传输速率、传输步骤等做了统一规定通信双方必须同时遵守才能完成数据交换。 TCP/IP协议 传输控制协议/因特网互联协议( Transmission Control Protocol/Internet Protocol)是Internet最基本、最广泛的协议。它定义了计算机如何连入因特网以及数据如何在它们之间传输的标准。它的内部包含一系列的用于处理数据通信的协议并采用了4层的分层模型每一层都呼叫它的下一层所提供的协议来完成自己的需求。 上图中OSI参考模型模型过于理想化未能在因特网上进行广泛推广。 TCP/IP参考模型(或TCP/IP协议)事实上的国际标准。 TCP/IP协议中的四层分别是应用层、传输层、网络层和链路层每层分别负责不同的通信功能。 链路层链路层是用于定义物理传输通道通常是对某些网络连接设备的驱动协议例如针对光纤、网线提供的驱动。 网络层网络层是整个TCP/IP协议的核心它主要用于将传输的数据进行分组将分组数据发送到目标计算机或者网络。而IP协议是一种非常重要的协议。IPinternet protocal又称为互联网协议。IP的责任就是把数据从源传送到目的地。它在源地址和目的地址之间传送一种称之为数据包的东西它还提供对数据大小的重新组装功能以适应不同网络对包大小的要求。 传输层主要使网络程序进行通信在进行网络通信时可以采用TCP协议也可以采用UDP协议。TCPTransmission Control Protocol协议即传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。UDP(User Datagram Protocol用户数据报协议)是一个无连接的传输层协议、提供面向事务的简单不可靠的信息传送服务。 应用层主要负责应用程序的协议例如HTTP协议、FTP协议等。
而通常我们说的TCP/IP协议其实是指TCP/IP协议族因为该协议家族的两个最核心协议TCP传输控制协议和IP网际协议为该家族中最早通过的标准所以简称为TCP/IP协议。
2.1.2 TCP与UDP协议
通信的协议还是比较复杂的java.net 包中包含的类和接口它们提供低层次的通信细节。我们可以直接使用这些类和接口来专注于网络程序开发而不用考虑通信的细节。
java.net 包中提供了两种常见的网络协议的支持 UDP用户数据报协议(User Datagram Protocol)。 非面向连的不可靠的UDP是无连接通信协议即在数据传输时数据的发送端和接收端不建立逻辑连接。简单来说当一台计算机向另外一台计算机发送数据时发送端不会确认接收端是否存在就会发出数据同样接收端在收到数据时也不会向发送端反馈是否收到数据。 由于使用UDP协议消耗资源小通信效率高所以通常都会用于音频、视频和普通数据的传输例如视频会议都使用UDP协议因为这种情况即使偶尔丢失一两个数据包也不会对接收结果产生太大影响。 但是在使用UDP协议传送数据时由于UDP的面向无连接性不能保证数据的完整性因此在传输重要数据时不建议使用UDP协议。 大小限制的数据被限制在64kb以内超出这个范围就不能发送了。 数据报(Datagram)网络传输的基本单位 TCP传输控制协议 (Transmission Control Protocol)。 面向连接的可靠的TCP协议是面向连接的通信协议即传输数据之前在发送端和接收端建立逻辑连接然后再传输数据它提供了两台计算机之间可靠无差错的数据传输。是一种面向连接的、可靠的、基于字节流的传输层的通信协议可以连续传输大量的数据。类似于打电话的效果。 这是因为它为当一台计算机需要与另一台远程计算机连接时TCP协议会采用“三次握手”方式让它们建立一个连接用于发送和接收数据的虚拟链路。数据传输完毕TCP协议会采用“四次挥手”方式断开连接。 TCP协议负责收集这些信息包并将其按适当的次序放好传送在接收端收到后再将其正确的还原。TCP协议保证了数据包在传送中准确无误。TCP协议使用重发机制当一个通信实体发送一个消息给另一个通信实体后需要收到另一个通信实体确认信息如果没有收到另一个通信实体确认信息则会再次重复刚才发送的消息。 三次握手TCP协议中在发送数据的准备阶段客户端与服务器之间的三次交互以保证连接的可靠。 第一次握手客户端向服务器端发出连接请求等待服务器确认。 第二次握手服务器端向客户端回送一个响应通知客户端收到了连接请求。 第三次握手客户端再次向服务器端发送确认信息确认连接。 四次挥手TCP协议中在发送数据结束后释放连接时需要经过四次挥手。 第一次挥手客户端向服务器端提出结束连接让服务器做最后的准备工作。此时客户端处于半关闭状态即表示不再向服务器发送数据了但是还可以接受数据。 第二次挥手服务器接收到客户端释放连接的请求后会将最后的数据发给客户端。并告知上层的应用进程不再接收数据。 第三次挥手服务器发送完数据后会给客户端发送一个释放连接的报文。那么客户端接收后就知道可以正式释放连接了。 第四次挥手客户端接收到服务器最后的释放连接报文后要回复一个彻底断开的报文。这样服务器收到后才会彻底释放连接。这里客户端发送完最后的报文后会等待2MSL因为有可能服务器没有收到最后的报文那么服务器迟迟没收到就会再次给客户端发送释放连接的报文此时客户端在等待时间范围内接收到会重新发送最后的报文并重新计时。如果等待2MSL后没有收到那么彻底断开。 完成三次握手连接建立后客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性TCP协议可以保证传输数据的安全所以应用十分广泛例如下载文件、浏览网页等。
2.2 网络编程三要素
协议 协议计算机网络通信必须遵守的规则已经介绍过了不再赘述。
IP地址
IP地址指互联网协议地址Internet Protocol Address俗称IP。IP地址用来给一个网络中的计算机设备做唯一的编号。假如我们把“个人电脑”比作“一台电话”的话那么“IP地址”就相当于“电话号码”。
IP地址分类方式一 IPv4是一个32位的二进制数通常被分为4个字节表示成a.b.c.d 的形式例如192.168.65.100 。其中a、b、c、d都是0~255之间的十进制整数那么最多可以表示42亿个。 IPv6由于互联网的蓬勃发展IP地址的需求量愈来愈大但是网络地址资源有限使得IP的分配越发紧张。 为了扩大地址空间拟通过IPv6重新定义地址空间采用128位地址长度每16个字节一组分成8组十六进制数表示成ABCD:EF01:2345:6789:ABCD:EF01:2345:6789号称可以为全世界的每一粒沙子编上一个网址这样就解决了网络地址资源数量不够的问题。
IP地址分类方式二
公网地址( 万维网使用)和 私有地址( 局域网使用)。192.168.开头的就是私有址址范围即为192.168.0.0--192.168.255.255专门为组织机构内部使用
常用命令 查看本机IP地址在控制台输入
ipconfig 检查网络是否连通在控制台输入
ping 空格 IP地址
ping 220.181.57.216
特殊的IP地址 本地回环地址(hostAddress)127.0.0.1 主机名(hostName)localhost
域名
因为IP地址数字不便于记忆因此出现了域名域名容易记忆当在连接网络时输入一个主机的域名后域名服务器(DNS)负责将域名转化成IP地址这样才能和主机建立连接。 ------- 域名解析 2.3 端口号
网络的通信本质上是两个进程应用程序的通信。每台计算机都有很多的进程那么在网络通信时如何区分这些进程呢
如果说IP地址可以唯一标识网络中的设备那么端口号就可以唯一标识设备中的进程应用程序了。 端口号用两个字节表示的整数它的取值范围是0~65535。 公认端口0~1023。被预先定义的服务通信占用如HTTP80FTP21Telnet23 注册端口1024~49151。分配给用户进程或应用程序。如Tomcat8080MySQL3306Oracle1521。 动态/ 私有端口49152~65535。
如果端口号被另外一个服务或应用所占用会导致当前程序启动失败。
利用协议IP地址端口号 三元组合就可以标识网络中的进程了那么进程间的通信就可以利用这个标识与其它进程进行交互。 3. InetAddress类
InetAddress类主要表示IP地址两个子类Inet4Address、Inet6Address。
Internet上的主机有两种方式表示地址 域名(hostName)www.baidu.com IP 地址(hostAddress)202.108.35.210
lInetAddress 类没有提供公共的构造器而是提供 了 如下几个 静态方法来获取InetAddress 实例 public static InetAddress getLocalHost() public static InetAddress getByName(String host) public static InetAddress getByAddress(byte[] addr)
InetAddress 提供了如下几个常用的方法 public String getHostAddress() 返回 IP 地址字符串以文本表现形式 public String getHostName() 获取此 IP 地址的主机名
import java.net.InetAddress;
import java.net.UnknownHostException;import org.junit.Test;public class TestInetAddress {Testpublic void test01() throws UnknownHostException{InetAddress localHost InetAddress.getLocalHost();System.out.println(localHost);}Testpublic void test02()throws UnknownHostException{InetAddress atguigu InetAddress.getByName(www.atguigu.com);System.out.println(atguigu);}Testpublic void test03()throws UnknownHostException{
// byte[] addr {112,54,108,98};byte[] addr {(byte)192,(byte)168,24,56};InetAddress atguigu InetAddress.getByAddress(addr);System.out.println(atguigu);}
} 4. Socket
通信的两端都要有Socket也可以叫“套接字”是两台机器间通信的端点。网络通信其实就是Socket间的通信。Socket可以分为 流套接字stream socket使用TCP提供可依赖的字节流服务 ServerSocket此类实现TCP服务器套接字。服务器套接字等待请求通过网络传入。 Socket此类实现客户端套接字也可以就叫“套接字”。套接字是两台机器间通信的端点。 数据报套接字datagram socket使用UDP提供“尽力而为”的数据报服务 DatagramSocket此类表示用来发送和接收UDP数据报包的套接字。 5. TCP网络编程
5.1 通信模型
Java语言的基于套接字TCP编程分为服务端编程和客户端编程其通信模型如图所示 5.2 开放步骤
5.2.1 服务器端
服务器 程序的工作过程包含以下四个基本的 步骤 调用 ServerSocket(int port) 创建一个服务器端套接字并绑定到指定端口上。用于监听客户端的请求。 调用 accept() 监听连接请求如果客户端请求连接则接受连接返回通信套接字对象。 调用 该Socket 类对象的 getOutputStream() 和 getInputStream () 获取输出流和输入流开始网络数据的发送和接收。 关闭Socket 对象客户端访问结束关闭通信套接字。
5.2.2 客户端
客户端Socket 的工作过程包含以下四个基本的步骤 创建 Socket 根据指定服务端的 IP 地址或端口号构造 Socket 类对象。若服务器端响应则建立客户端到服务器的通信线路。若连接失败会出现异常。 打开连接到 Socket 的输入/ 出流 使用 getInputStream()方法获得输入流使用getOutputStream()方法获得输出流进行数据传输 按照一定的协议对 Socket 进行读/ 写操作通过输入流读取服务器放入线路的信息但不能读取自己放入线路的信息通过输出流将信息写入线路。 关闭 Socket 断开客户端到服务器的连接释放线路
5.2.3 相关API
ServerSocket类的构造方法 ServerSocket(int port) 创建绑定到特定端口的服务器套接字。
ServerSocket类的常用方法 Socket accept()侦听并接受到此套接字的连接。
Socket类的常用构造方法 public Socket(InetAddress address,int port)创建一个流套接字并将其连接到指定 IP 地址的指定端口号。 public Socket(String host,int port)创建一个流套接字并将其连接到指定主机上的指定端口号。
Socket类的常用方法 public InputStream getInputStream()返回此套接字的输入流可以用于接收消息 public OutputStream getOutputStream()返回此套接字的输出流可以用于发送消息 public InetAddress getInetAddress()此套接字连接到的远程 IP 地址如果套接字是未连接的则返回 null。 public InetAddress getLocalAddress()获取套接字绑定的本地地址。 public int getPort()此套接字连接到的远程端口号如果尚未连接套接字则返回 0。 public int getLocalPort()返回此套接字绑定到的本地端口。如果尚未绑定套接字则返回 -1。 public void close()关闭此套接字。套接字被关闭后便不可在以后的网络连接中使用即无法重新连接或重新绑定。需要创建新的套接字对象。 关闭此套接字也将会关闭该套接字的 InputStream 和 OutputStream。 public void shutdownInput()如果在套接字上调用 shutdownInput() 后从套接字输入流读取内容则流将返回 EOF文件结束符。 即不能在从此套接字的输入流中接收任何数据。 public void shutdownOutput()禁用此套接字的输出流。对于 TCP 套接字任何以前写入的数据都将被发送并且后跟 TCP 的正常连接终止序列。 如果在套接字上调用 shutdownOutput() 后写入套接字输出流则该流将抛出 IOException。 即不能通过此套接字的输出流发送任何数据。
注意先后调用Socket的shutdownInput()和shutdownOutput()方法仅仅关闭了输入流和输出流并不等于调用Socket的close()方法。在通信结束后仍然要调用Scoket的close()方法因为只有该方法才会释放Socket占用的资源比如占用的本地端口号等。
UDP(User Datagram Protocol用户数据报协议)是一个无连接的传输层协议、提供面向事务的简单不可靠的信息传送服务类似于短信。
UDP协议是一种面向非连接的协议面向非连接指的是在正式通信前不必与对方先建立连接不管对方状态就直接发送至于对方是否可以接收到这些数据内容UDP协议无法控制因此说UDP协议是一种不可靠的协议。无连接的好处就是快省内存空间和流量因为维护连接需要创建大量的数据结构。UDP会尽最大努力交付数据但不保证可靠交付没有TCP的确认机制、重传机制如果因为网络原因没有传送到对端UDP也不会给应用层返回错误信息。
UDP协议是面向数据报文的信息传送服务。UDP在发送端没有缓冲区对于应用层交付下来的报文在添加了首部之后就直接交付于ip层不会进行合并也不会进行拆分而是一次交付一个完整的报文。比如我们要发送100个字节的报文我们调用一次send()方法就会发送100字节接收方也需要用receive()方法一次性接收100字节不能使用循环每次获取10个字节获取十次这样的做法。
UDP协议没有拥塞控制所以当网络出现的拥塞不会导致主机发送数据的速率降低。虽然UDP的接收端有缓冲区但是这个缓冲区只负责接收并不会保证UDP报文的到达顺序是否和发送的顺序一致。因为网络传输的时候由于网络拥塞的存在是很大的可能导致先发的报文比后发的报文晚到达。如果此时缓冲区满了后面到达的报文将直接被丢弃。这个对实时应用来说很重要比如视频通话、直播等应用。
因此UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境数据报大小限制在64K以下。
基于UDP协议的网络编程仍然需要在通信实例的两端各建立一个Socket但这两个Socket之间并没有虚拟链路这两个Socket只是发送、接收数据报的对象Java提供了DatagramSocket对象作为基于UDP协议的Socket使用DatagramPacket代表DatagramSocket发送、接收的数据报。
DatagramSocket 类的常用方法 public DatagramSocket(int port)创建数据报套接字并将其绑定到本地主机上的指定端口。套接字将被绑定到通配符地址IP 地址由内核来选择。 public DatagramSocket(int port,InetAddress laddr)创建数据报套接字将其绑定到指定的本地地址。本地端口必须在 0 到 65535 之间包括两者。如果 IP 地址为 0.0.0.0套接字将被绑定到通配符地址IP 地址由内核选择。 public void close()关闭此数据报套接字。 public void send(DatagramPacket p)从此套接字发送数据报包。DatagramPacket 包含的信息指示将要发送的数据、其长度、远程主机的 IP 地址和远程主机的端口号。 public void receive(DatagramPacket p)从此套接字接收数据报包。当此方法返回时DatagramPacket 的缓冲区填充了接收的数据。数据报包也包含发送方的 IP 地址和发送方机器上的端口号。 此方法在接收到数据报前一直阻塞。数据报包对象的 length 字段包含所接收信息的长度。如果信息比包的长度长该信息将被截短。
DatagramPacket类的常用方法 public DatagramPacket(byte[] buf,int length)构造 DatagramPacket用来接收长度为 length 的数据包。 length 参数必须小于等于 buf.length。 public DatagramPacket(byte[] buf,int length,InetAddress address,int port)构造数据报包用来将长度为 length 的包发送到指定主机上的指定端口号。length 参数必须小于等于 buf.length。 public int getLength()返回将要发送或接收到的数据的长度。
示例代码
发送端 import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.ArrayList;public class Send {public static void main(String[] args)throws Exception {
// 1、建立发送端的DatagramSocketDatagramSocket ds new DatagramSocket();//要发送的数据ArrayListString all new ArrayListString();all.add(让天下没有难学的技术);all.add(学高端前沿的IT技术来);all.add(让你的梦想变得更具体);all.add(让你的努力更有价值);//接收方的IP地址InetAddress ip InetAddress.getByName(127.0.0.1);//接收方的监听端口号int port 9999;//发送多个数据报for (int i 0; i all.size(); i) {
// 2、建立数据包DatagramPacketbyte[] data all.get(i).getBytes();DatagramPacket dp new DatagramPacket(data, data.length, ip, port);
// 3、调用Socket的发送方法ds.send(dp);}// 4、关闭Socketds.close();}
}
接收端
import java.net.DatagramPacket;
import java.net.DatagramSocket;public class Receive {public static void main(String[] args) throws Exception {
// 1、建立接收端的DatagramSocket需要指定本端的监听端口号DatagramSocket ds new DatagramSocket(9999);//一直监听数据while(true){// 2、建立数据包DatagramPacketbyte[] buffer new byte[1024*64];DatagramPacket dp new DatagramPacket(buffer , buffer.length);// 3、调用Socket的接收方法ds.receive(dp);//4、拆封数据String str new String(buffer,0,dp.getLength());System.out.println(str);}}
}
文章转载自: http://www.morning.bfwk.cn.gov.cn.bfwk.cn http://www.morning.dphmj.cn.gov.cn.dphmj.cn http://www.morning.pmsl.cn.gov.cn.pmsl.cn http://www.morning.dbqcw.com.gov.cn.dbqcw.com http://www.morning.qfnrx.cn.gov.cn.qfnrx.cn http://www.morning.fkmyq.cn.gov.cn.fkmyq.cn http://www.morning.zrfwz.cn.gov.cn.zrfwz.cn http://www.morning.gwyml.cn.gov.cn.gwyml.cn http://www.morning.slzkq.cn.gov.cn.slzkq.cn http://www.morning.hkshy.cn.gov.cn.hkshy.cn http://www.morning.kcyxs.cn.gov.cn.kcyxs.cn http://www.morning.lkbkd.cn.gov.cn.lkbkd.cn http://www.morning.znqmh.cn.gov.cn.znqmh.cn http://www.morning.rqjxc.cn.gov.cn.rqjxc.cn http://www.morning.cwyrp.cn.gov.cn.cwyrp.cn http://www.morning.rlksq.cn.gov.cn.rlksq.cn http://www.morning.bfmrq.cn.gov.cn.bfmrq.cn http://www.morning.tsnq.cn.gov.cn.tsnq.cn http://www.morning.plzgt.cn.gov.cn.plzgt.cn http://www.morning.qkpzq.cn.gov.cn.qkpzq.cn http://www.morning.ycnqk.cn.gov.cn.ycnqk.cn http://www.morning.gwsll.cn.gov.cn.gwsll.cn http://www.morning.phjyb.cn.gov.cn.phjyb.cn http://www.morning.wzwyz.cn.gov.cn.wzwyz.cn http://www.morning.nzxdz.cn.gov.cn.nzxdz.cn http://www.morning.dbfwq.cn.gov.cn.dbfwq.cn http://www.morning.jxjrm.cn.gov.cn.jxjrm.cn http://www.morning.lqws.cn.gov.cn.lqws.cn http://www.morning.wzwyz.cn.gov.cn.wzwyz.cn http://www.morning.bhdyr.cn.gov.cn.bhdyr.cn http://www.morning.twdwy.cn.gov.cn.twdwy.cn http://www.morning.knwry.cn.gov.cn.knwry.cn http://www.morning.ljjph.cn.gov.cn.ljjph.cn http://www.morning.sgbjh.cn.gov.cn.sgbjh.cn http://www.morning.mlfgx.cn.gov.cn.mlfgx.cn http://www.morning.clndl.cn.gov.cn.clndl.cn http://www.morning.ahlart.com.gov.cn.ahlart.com http://www.morning.juju8.cn.gov.cn.juju8.cn http://www.morning.mdtfh.cn.gov.cn.mdtfh.cn http://www.morning.srbfz.cn.gov.cn.srbfz.cn http://www.morning.rykgh.cn.gov.cn.rykgh.cn http://www.morning.xywfz.cn.gov.cn.xywfz.cn http://www.morning.ktpzb.cn.gov.cn.ktpzb.cn http://www.morning.nfqyk.cn.gov.cn.nfqyk.cn http://www.morning.tkrdg.cn.gov.cn.tkrdg.cn http://www.morning.wjhnx.cn.gov.cn.wjhnx.cn http://www.morning.fndfn.cn.gov.cn.fndfn.cn http://www.morning.paxkhqq.cn.gov.cn.paxkhqq.cn http://www.morning.dwwbt.cn.gov.cn.dwwbt.cn http://www.morning.xbhpm.cn.gov.cn.xbhpm.cn http://www.morning.wtsr.cn.gov.cn.wtsr.cn http://www.morning.llxns.cn.gov.cn.llxns.cn http://www.morning.xjqkh.cn.gov.cn.xjqkh.cn http://www.morning.ai-wang.cn.gov.cn.ai-wang.cn http://www.morning.mwpcp.cn.gov.cn.mwpcp.cn http://www.morning.pnjsl.cn.gov.cn.pnjsl.cn http://www.morning.fldk.cn.gov.cn.fldk.cn http://www.morning.wbrf.cn.gov.cn.wbrf.cn http://www.morning.kdtdh.cn.gov.cn.kdtdh.cn http://www.morning.lbgsh.cn.gov.cn.lbgsh.cn http://www.morning.ltzkk.cn.gov.cn.ltzkk.cn http://www.morning.pqktp.cn.gov.cn.pqktp.cn http://www.morning.dhdzz.cn.gov.cn.dhdzz.cn http://www.morning.rwnx.cn.gov.cn.rwnx.cn http://www.morning.wknbc.cn.gov.cn.wknbc.cn http://www.morning.hcsqznn.cn.gov.cn.hcsqznn.cn http://www.morning.xymkm.cn.gov.cn.xymkm.cn http://www.morning.lzph.cn.gov.cn.lzph.cn http://www.morning.zlkps.cn.gov.cn.zlkps.cn http://www.morning.hyyxsc.cn.gov.cn.hyyxsc.cn http://www.morning.nmngq.cn.gov.cn.nmngq.cn http://www.morning.tturfsoc.com.gov.cn.tturfsoc.com http://www.morning.pmdnx.cn.gov.cn.pmdnx.cn http://www.morning.dkmzr.cn.gov.cn.dkmzr.cn http://www.morning.plwfx.cn.gov.cn.plwfx.cn http://www.morning.bjndc.com.gov.cn.bjndc.com http://www.morning.mhnrx.cn.gov.cn.mhnrx.cn http://www.morning.fxzgw.com.gov.cn.fxzgw.com http://www.morning.pdbgm.cn.gov.cn.pdbgm.cn http://www.morning.xdfkrd.cn.gov.cn.xdfkrd.cn