首页 > 代码库 > 02_天气查询_socket方式模拟

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

技术分享

 

02_天气查询_socket方式模拟