• 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传输数据注意要关注下如何解析数据流。

  • 相关阅读:
    matrix_last_acm_4
    matrix_last_acm_3
    matrix_last_acm_2
    matrix_last_acm_1
    2015亚洲区北京站网络赛
    poj 1062 昂贵的聘礼 最短路
    2-SAT !!
    hdu 4925
    hdu 4927 Java大数
    poj3687 拓扑排序 还没怎么搞明白 回头再想想
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5832710.html
Copyright © 2020-2023  润新知