• WebService、Http请求、Socket请求


    WebService

    定义

    一种web程序访问方式,常见协议:SOAP(简单对象访问协议),其实就是Http+XML。利用对象进行数据交互。

    其他

    略。

    其他博客

    Http请求

    定义

    利用TCP/IP协议和json数据格式进行数据传输,现在也开始流行RestFul风格;是应用层协议,主要解决如何包装数据。

    1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。

    2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。

    由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。

    请求方法

    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
            public static String sendByPost(String urlString, Object params) {
            Map<String, List<String>> responseMap = new HashMap<String, List<String>>();
            String content = null; // 正文内容
            BufferedReader bfr = null;
            DataOutputStream out = null;
            try {
                URL url = new URL(urlString);
    
                /** -- 创建URL连接 -- */
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                //设置请求方式
                conn.setRequestMethod("POST");
                //设置获取连接时间
                conn.setConnectTimeout(10000);
                //设置阅读时间
                conn.setReadTimeout(10000);
    
                /** -- 设置通用的请求属性 -- */
                //conn.setRequestProperty("appId", "18151689001");
                /**
                 * httpUrlConnection.setDoOutput(true);以后就可以使用conn.getOutputStream().write()
                 * httpUrlConnection.setDoInput(true);以后就可以使用conn.getInputStream().read();
                 * get请求用不到conn.getOutputStream(),因为参数直接追加在地址后面,因此默认是false。
                 * post请求(比如:文件上传)需要往服务区传输大量的数据,这些数据是放在http的body里面的,因此需要在建立连接以后,往服务端写数据。
                 * 因为总是使用conn.getInputStream()获取服务端的响应,因此默认值是true。
                 */
                conn.setDoOutput(true);
                conn.setDoInput(true);
                //设置请求头
                conn.setRequestProperty("Accept-Charset", "UTF-8");
                //conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                conn.setRequestProperty("Content-Type", "application/json");
                conn.connect();
                OutputStream writer = conn.getOutputStream();
                // 写入请求的字符串
                writer.write((params.toString()).getBytes("UTF-8"));
                writer.flush();
                /** -- 获取所有响应头字段 -- */
                responseMap = conn.getHeaderFields();
    
                /** -- 读取响应内容 -- */
                bfr = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
                String s = null;
                StringBuffer sbf = new StringBuffer();
                while ((s = bfr.readLine()) != null) {
                    sbf.append(s);
                }
                content = sbf.toString();
            } catch (Exception ex) {
                System.out.println("发送请求错误  -- 错误信息:" + ex.getMessage());
            } finally {
                try {
                    if (bfr != null) {
                        bfr.close();
                    }
                } catch (Exception ex) {
                    System.out.println("关闭流错误  -- 错误信息:" + ex.getMessage());
                }
            }
            return content;
        }
    

    Socket请求

    定义

    Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。

    socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。所以当一个socket连接中没有数据的传输,那么为了维持连接需要发送心跳消息~具体心跳消息格式是开发者自己定义的。

    请求方法

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
     public  String socket(String ip,Integer port,String message) throws IOException {
            String info="";
            BufferedReader bufferedReader=null;
            InputStream inputStream=null;
            PrintWriter printWriter=null;
            OutputStream outputStream=null;
            Socket socket=null;
            try {
                //创建Socket对象
                socket=new Socket(ip,port);
                //根据输入输出流和服务端连接
                outputStream=socket.getOutputStream();//获取一个输出流,向服务端发送信息
                printWriter=new PrintWriter(outputStream);//将输出流包装成打印流
                printWriter.print(message);
                printWriter.flush();
                socket.shutdownOutput();//关闭输出流
                inputStream=socket.getInputStream();//获取一个输入流,接收服务端的信息
                InputStreamReader inputStreamReader=new InputStreamReader(inputStream,"UTF-8");//包装成字符流,提高效率
                bufferedReader= new BufferedReader(inputStreamReader);//缓冲区
    
                String temp=null;//临时变量
                while((temp=bufferedReader.readLine())!=null){
                    info+=temp;
                }
                //关闭相对应的资源
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                if(bufferedReader!=null){
                    bufferedReader.close();
                };
                if(inputStream!=null){
                    inputStream.close();
                };
                if(printWriter!=null){
                    printWriter.close();
                };
                if(outputStream!=null){
                    outputStream.close();
                };
                if(socket!=null){
                    socket.close();
                };
            }
            return info;
        }
    
    XFS
  • 相关阅读:
    如何创建多线程
    Oracle导入数据表
    Oracle如何创建数据库用户
    Oracle忘记密码,如何修改密码
    Oracle如何创建表空间
    leetcode 787. K 站中转内最便宜的航班 js题解
    JS实现平衡二叉树
    typescript的安装与配置
    二分查找JS实现
    JS作用域(一):一般变量声明
  • 原文地址:https://www.cnblogs.com/xiaofengshan/p/14748578.html
Copyright © 2020-2023  润新知