精华内容
下载资源
问答
  • iptables匹配功能length
    千次阅读
    2022-03-26 19:29:56

    用于匹配报文特定长度,或者范围,这里的报文长度指的是4层数据的长度,如TCP/UDP/ICMP等。以下仅允许数据包小于100字节的ping请求数据进入。

    # iptables -I INPUT -p icmp --icmp-type 8 -m length --length 100: -j DROP
    #
    # iptables -L -n -v  
    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
        0     0 DROP       icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 8 length 100:65535
    

    进行如下测试,在另外的主机上ping配置以上策略的主机,发送了4个报文都没有响应。

    # ping 192.168.1.105 -s 110
    PING 192.168.1.105 (192.168.1.105) 110(138) bytes of data.
    ^C
    --- 192.168.1.105 ping statistics ---
    4 packets transmitted, 0 received, 100% packet loss, time 2999ms
    

    在配置策略主机上查看统计信息,丢弃了4个报文。

    # iptables -L -n -v
    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
        4   552 DROP       icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 8 length 100:65535
    

    length匹配

    由函数xt_register_matches注册匹配结构length_mt_reg,其包含IPv4和IPv6两个部分。

    static struct xt_match length_mt_reg[] __read_mostly = {
        {
            .name       = "length",
            .family     = NFPROTO_IPV4,
            .match      = length_mt,
            .matchsize  = sizeof(struct xt_length_info),
            .me     = THIS_MODULE,
        },
        {
            .name       = "length",
            .family     = NFPROTO_IPV6,
            .match      = length_mt6,
            .matchsize  = sizeof(struct xt_length_info),
            .me     = THIS_MODULE,
        },
    };
    static int __init length_mt_init(void)
    {
        return xt_register_matches(length_mt_reg, ARRAY_SIZE(length_mt_reg));
    

    对于IPv4协议,检测IP头部的总长度字段的值,是否符合策略中的设定值。对于IPv6协议,检测IPv6头部的载荷长度字段的值,是否符合策略中的设定值。

    static bool
    length_mt(const struct sk_buff *skb, struct xt_action_param *par)
    {
        const struct xt_length_info *info = par->matchinfo;
        u_int16_t pktlen = ntohs(ip_hdr(skb)->tot_len);
    
        return (pktlen >= info->min && pktlen <= info->max) ^ info->invert;
    }
    static bool
    length_mt6(const struct sk_buff *skb, struct xt_action_param *par)
    {
        const struct xt_length_info *info = par->matchinfo;
        const u_int16_t pktlen = ntohs(ipv6_hdr(skb)->payload_len) +
                     sizeof(struct ipv6hdr);
    
        return (pktlen >= info->min && pktlen <= info->max) ^ info->invert;
    }
    

    内核版本 5.10

    更多相关内容
  • length_length什么意思

    千次阅读 2021-05-21 10:33:58
    length什么意思length[英] [leŋθ][美] [lɛŋkθ, lɛŋθ]n.长度,长;时间的长短;(语)音长;一段,一节复数:lengths1.A book is not judged only on its length.不能只根据篇幅长短来评价一本书。2.A hall ran...

    length什么意思

    length[英] [leŋθ][美] [lɛŋkθ, lɛŋθ]

    n.长度,长;时间的长短;(语)音长;一段,一节复数:lengths

    1.A book is not judged only on its length.

    不能只根据篇幅长短来评价一本书。

    2.A hall ran the length of the upper floor of the house.

    走廊的长度等于房子上层的长度。

    3.According to the law, the accuser, the accused, and the judge were each allowed to talk for the same length of time.

    按照法律,每一原告、被告及法官都准许有等长的时间发言。

    4.All these sticks are of uniform length.

    所有这些手杖的长度都是一样的。

    5.An aisle ran the length of the house.

    过道的长度等于房子的长度。

    6.An inch is a measure of length.

    对是长度的度量单位。

    7.Arrangements were well advanced for linking up this newly operated length with the Lancaster bypass.

    已经提前做出安排使新投入使用的这段高速公路与兰开斯特支线衔接。

    8.Astronomers can accurately foretell the date,time,and length of future eclipses.

    天文学家能精确地预告未来日食月食的日期、时刻和时长。

    9.At length he returned.

    他最后还是回来了。

    10.At length the young lady raised her head and looked steadily at his intelligent face.

    那个年轻妇女终于抬起头,目不转睛地盯着他心领神会的脸。

    11.At length, weary with wandering, they fell asleep.

    最后,因为游逛得很疲乏,他们都睡着了。

    12.Full-length coats are vogue today.

    如今流行长外套。

    13.Give me a piece of rope, any length will do.

    给我一根绳子,多长都行。

    14.He fell full length.

    他直挺挺地跌倒在地上。

    15.He is the queer old duck with the knee-length gaiters and walrus mustache.

    他穿着高及膝盖的皮护腿,留着海象般的八字胡,真是个古怪的老家伙。

    Java中length的意思

    记住数组里面length代表的是长度,作为数组的一个属性,即里面元素的总个数,即arr.length

    String是有length()方法的。没有length属性;而数组,只有length属性,没有length()方法。

    更多扩展补充

    扩展

    谢谢^ω^

    以后我有java方面的问题能问你吗

    补充

    小问题没什么的,我们有组织,要不要来Java框架平台研发 378437335

    扩展

    我只是个初学者T_T那个组织太高大上。。还有,题目中的i代表的是元素的顺序吗。。

    补充

    i作为数组下标的起点来的,看你怎么用,也可是终点,i--就是;一般我们都在那个组织,不去,就帮不上你

    扩展

    好吧,谢谢了,我还是自己琢磨吧

    Java中length的意思

    记住数组里面length代表的是长度,作为数组的一个属性,即里面元素的总个数,即arr.length

    String是有length()方法的。没有length属性;而数组,只有length属性,没有length()方法。

    更多扩展补充

    扩展

    谢谢^ω^

    以后我有java方面的问题能问你吗

    补充

    小问题没什么的,我们有组织,要不要来Java框架平台研发 378437335

    扩展

    我只是个初学者T_T那个组织太高大上。。还有,题目中的i代表的是元素的顺序吗。。

    补充

    i作为数组下标的起点来的,看你怎么用,也可是终点,i--就是;一般我们都在那个组织,不去,就帮不上你

    扩展

    好吧,谢谢了,我还是自己琢磨吧

    C语言中L->length是什么意思?

    L是指向某个结构变量的指针,而length是结构体的成员。

    意思为*L为获取该结构体变量,.length则为获取该变量length成员的值。

    不能使用函数strlea。编写函数convert(char*s),其功能是将字符串s倒置。编写主函数,输入字符串石头人,先调用lenghth函数输出串场,在调用convert函数,将字符串str倒置后输出。

    811aafb1566883383aa42ad6af45a58f.png

    扩展资料:

    顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用选择结构。选择结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。

    选择结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的选择语句。选择结构适合于带有逻辑或关系比较等条件判断的计算,设计这类程序时往往都要先绘制其程序流程图。

    然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。程序流程图是根据解题分析所绘制的程序执行流程图。

    C程序中函数的数目实际上是不限的,如果说有什么限制的话,那就是,一个C程序中必须至少有一个函数,而且其中必须有一个并且仅有一个以main为名,这个函数称为主函数,整个程序从这个主函数开始执行。

    参考资料来源:百度百科-C语言

    matlab中的length什么意思?如何应用?

    length(x0)为数列的长度,即它里面有多少个元素.

    如果x0是矩阵的话,比方说M行N列,那么length返回M和N这两个数的最大值.

    for k=2:N

    就是说k=2,3,4,5,6,....N

    这样循环

    扩展

    谢谢你啊! 我是新手,还有个问题。“如果x0是矩阵的话,比方说M行N列,那么length返回M和N这两个数的最大值" 这个什么意思 我不太懂 我的x0=[101.43,99.98,101.13,102.23,103.65,104.75,109.38,107.6,105.5,107.58,106.5]

    补充

    你在Matlab下面运行一下就可以看出一些东西

    x0=[1,2,3,4] %逗号表示行方向串起来,这是一行四列的矩阵,也就是行向量

    y0=[1;2;3;4] %分号表示列方向串起来,这个四行一列的矩阵,也就是列向量

    z0=[1,2;3,4] %1,2是行方向写,后加一个分号,相当于换了一行,再来3,4串起来,就变成两行两列的矩阵

    看完上面,先猜猜看下面输出是什么,是几行几列的

    w0=[1,3,5;2,4,6]

    然后你length(x0),length(y0),length(z0)

    以及length(w0)

    就体会了.

    C语言(*L).length是什么意思

    L应该是指向某个结构变量的指针,而length是结构体的成员。

    则意思为*L为获取该结构体变量,.length则为获取该变量length成员的值

    扩展

    1b49aa7e3193408f4a3cf18a1c241746.png

    您看下我的理解L指向线性表的第一个节点   (L代表这个节点的 地址)

    *L代表这第一个节点的所有成员(这个节点的整体 包括*elem length listsize)

    (*L).length代表这个节点的length成员的值

    这样理解是正确的吧?

    (*L).length  这个()不能去掉是为了把*和L作为一个整体吧?

    如果去掉括号的话就是*(L.length)的意思了吧?

    f78d9abbf9668fbcacd0fe19fe615697.png

    1b49aa7e3193408f4a3cf18a1c241746.png

    补充

    是的。前面的理解没错。

    .的优先级比*高,所以为了语义正确和容易理解,(*L).length的写法是正确的。

    length(x)在matlab中是什么意思?

    length(x0)为数列的长度,即它里面有多少个元素。

    n=length(A):如果A为非空数组,返回行数和列数两者之间数值较大的那一个值,即相当于执行了max(size(A));如果A为空数组,则返回0。

    如果A是一个向量则返回A的长度。n=max(size(A):若A为非空数组,返回A的最大维数;若A为空数组,返回A中最长的非0维数。

    8cb064f7531791306aef5fc9b327b612.png

    扩展资料:

    MATLAB主要用于数值分析、数值和符号计算、工程与科学绘图、控制系统的设计与仿真、数字图像处理、数字信号处理、通讯系统设计与仿真、财务与金融工程,是一款商业数学软件。

    MATLAB是matrix和laboratory两个词词根的组合,意为矩阵工厂。该软件将数值分析、矩阵计算、科学数据可视化、非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,提供了一种有效数值计算的解决方案。

    参考资料来源:百度百科-MATLAB

    请问java中的.option.length什么意思?

    javascript吧...

    getElementById("select的ID").options.length是取页面中指定的select框(下拉列表选择框)中选项的个数;

    document.forms[0].objselect.options.length是取form表单中指定的select框(下拉列表选择框)中选项的个数。

    两者的区别在于:不管这个select是不是在form里,前者都能取到,而后者只能取到form中的对象。getElementById这种写法是通用的。

    在java里arr.length是什么意思?

    arr是程序中定义的数组变量

    比如:int[] arr = new int[10];

    arr.length,返回的是这个数组的长度,此处我们定义的数组的长度为10,所以arr.length的返回值也是10

    java中字符串.length是什么意思?

    这个是用来求字符串长度的一个函数、、 如果s这个字符串有11个字符、 那么久会返回为一个int类型的数字 数字 为 11 如果没有字符、 就返回一个int类型的 0

    展开全文
  • matlab中length函数用法

    千次阅读 2021-04-18 17:05:56
    matlab中的length表示什么?应该如何使用?length:数组长度(即行数或列数中的较大值); 使用方法: n=length(A):如果A为非空数组,返回行数和列数两者之间数值较大的那一个值,即相当于执行了max(size(A));如果A...

    matlab中的length表示什么?应该如何使用?

    length:数组长度(即行数或列数中的较大值); 使用方法: n=length(A):如果A为非空数组,返回行数和列数两者之间数值较大的那一个值,即相当于执行了max(size(A));如果A为空数组,则返回0;如果A是一个向量则返回A的长度。

    length(x)在matlab中是什么意思?

    e129e2c99db2b87320906504018e5273.png

    if length(h)>1 || h<0 || h>2*b return 是什么意思?

    length(x0)为数列的长度,即它里面有多少个元素。 n=length(A):如果A为非空数组,返回行数和列数两者之间数值较大的那一个值,即相当于执行了max(size(A));如果A为空数组,则返回0。 如果A是一个向量则返回A的长度。n=max(size(A):若A为非空

    matlab中SIZE()的用法

    CSS布局HTML小编今天和大家分享教SIZE的用法 为什么a=[1,2,3;4,5,6;7,8,9] N=size(a,1)会出现Index e没发现有什么问题

    matlab中predict函数用法

    时间序列分析中如何利用predict进行预测,我计算时输出结果和原始观测数先介绍这个CSS布局HTML小编今天和大家分享乘函数的prod的语法格式,如图所示

    现在创建一个向量和一个矩阵。

    先说一下关于一维矩阵(向量)的使用。

    最后实验输入input = {0.9 -> 1, 1.2 -> 2, 1.5 -> 3, 2.8 -> 4, 3.9 -> 6}p = Pred

    matlab 中关于fread函数的用法

    用fread打开一个文件时,需要不需要把被打开文件放在某个特定位置?

    fread函数在MATLAB中的功能:fread函数可从文件中读取二进制数据 用法: A = fread(fid, count) A = fread(fid, count, precision) 其中fid为指针所指文件中的当前位置,count指读取的数据个数, precision表示以什么格式的数据类型读取数据。

    N=length(c( : 1)); 这个语句是什么意思?CSS布局HTML小编今天和大家分享教

    计算c(:,1)这个向量的元素个数

    matlab中mean函数的使用

    十分不明白mean()中k:12:it的意思,只知道it是sst()中的时间序列,CSS布局HTML小编今天和大家分享解mean(sst(i,k:12:it))的意思是把sst中的第i行,第k列到第it列每隔12个数取一个。

    matlab 中 bwboundaries 函数 的用法

    谁知道matlab中 bwboundaries 的用法,帮下小弟,小弟不胜感激.越详细越好.

    格式:B = bwboundaries(BW,conn)(基本格式) 作用:获取二值图中对象的轮廓,和OpenCV中cvFindContours函数功能类似。B是一个P×1的cell数组,P为对象个数,每个cell是Q×2的矩阵,对应于对象轮廓像素的坐标。 help 文档例子 I = imread('rice.p

    matlab报错中length 1是什么意思Output returned by S-function 'xuexijia' in 'xuexijia2/S-Function' 在flag = 3的调用期间,在'xuexijia2 / S-Function'中由S函数'xuexijia'返回的输出必须是长度为1的实矢量。感觉应该是你定义应该返回实数的函数返回值不是一个实数(可能你返回成了一个向量或者矩阵)。

    matlab中关于findsym和length两个函数的应用的小问题

    以下是我在命令窗口中写的代码 >>syms f x y >>f=x-y-3; >>y1=findsym(flength是返回y1的行列数里面最大的数,这里y1是“x,y“,注意中间有个,号,也是一位,所以是3。

    展开全文
  • HTTP Content-Length深入实践

    万次阅读 2019-02-21 00:20:28
    HTTP头部Content-Length用于描述HTTP消息实体的传输长度,浏览器对比Content-Length和HTTP请求或者响应body长度判断一次HTTP传输过程,以独立于TCP长连接。但是如果Content-Length与HTTP请求或者响应body长度不一致...

    转载自(https://www.jianshu.com/p/d606732f2ebc

    引子

    HTTP头部Content-Length用于描述HTTP消息实体的传输长度,浏览器对比Content-Length和HTTP请求或者响应body长度判断一次HTTP传输过程,以独立于TCP长连接。但是如果Content-Length与HTTP请求或者响应body长度不一致时,本文深入实践浏览器怎么处理这些异常情况。
    Content-Length和Content-Type焦不离孟,关于Content-Type可以参考拙作HTTP Content-Type深入实践

    情况1:HTTP Response头部不显示指定Content-Length

    后端Spring boot+Java代码:

    package com.demo.web.http;
    
    import com.google.common.collect.Maps;
    import com.google.gson.Gson;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.Map;
    
    @Controller
    @RequestMapping("http")
    public class ContentTypeController {
        private final static Gson GSON = new Gson();
        @RequestMapping("/content-type-response")
        public String contentType4Response() {
            return "http/content-type-response";
        }
    
        @RequestMapping("content-type-response.json")
        @ResponseBody
        public void json4Response(HttpServletResponse response) throws IOException {
            Map<String, Object> map = Maps.newHashMap();
            map.put("name", "datou");
            response.setContentType("application/json;charset=utf-8");
            response.getWriter().write(GSON.toJson(map));
        }
    }

    前端html+css+javascript+jquery代码:

    <!DOCTYPE HTML>
    <html>
    <head>
        <title>HTTP response Content-Type Demo</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <script src="http://code.jquery.com/jquery-1.4.2.min.js" type="text/javascript"></script>
    </head>
    <body>
    <p>Name: <span id="name"></span></p>
    <button onclick="show()">show name</button>
    <script>
        function show() {
            $.get("content-type-response.json", function (data) {
                console.log(data);
                $("#name").text(data.name);
            });
        }
    </script>
    </body>
    </html>

    访问图1红色方框的域名,对应图2绿色方框的抓包,点击“show name”按钮,前端发送ajax请求服务端,对应图2蓝色方框的抓包,即使服务端不显示指定HTTP Response头部Content-Length,实际的HTTP Response头部Content-Length: 16,如图1红色方框,对应图2红色方框的seq 712:848,其中136字节不只包含HTTP Response body。

     

                                                                                图1 前端页面访问后端

                                                                               图2 前端页面访问后端tcpdump

    情况2:HTTP Response头部显示指定Content-Length等于实际Response body长度

    后端Spring boot+Java代码,显示指定Content-Length:response.setContentLength(16);

    package com.demo.web.http;
    
    import com.google.common.collect.Maps;
    import com.google.gson.Gson;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.Map;
    
    @Controller
    @RequestMapping("http")
    public class ContentTypeController {
        private final static Gson GSON = new Gson();
        @RequestMapping("/content-type-response")
        public String contentType4Response() {
            return "http/content-type-response";
        }
    
        @RequestMapping("content-type-response.json")
        @ResponseBody
        public void json4Response(HttpServletResponse response) throws IOException {
            Map<String, Object> map = Maps.newHashMap();
            map.put("name", "datou");
            response.setContentType("application/json;charset=utf-8");
            response.setContentLength(16);
            response.getWriter().write(GSON.toJson(map));
        }
    }

    访问前端页面与情况1一样,效果如图1和图2所示。

    情况3:HTTP Response头部显示指定Content-Length小于实际Response body长度

    后端Spring boot+Java代码,显示指定Content-Length:response.setContentLength(15);
    访问图3域名,点击“show name”按钮,前端发送ajax请求服务端,服务端返回HTTP Response头部Content-Length: 15,对应图2红色方框的seq 712:847,相比图2的红色方框少一个字节。导致Response body不完整,前端也就不能解码Content-Type:application/json;charset=UTF-8的字符串为json对象,所以图3的Name:为空。


                                                                                                  图3 前端页面访问后端

                                                                                 图4 前端页面访问后端tcpdump

    情况4:HTTP Response头部显示指定Content-Length大于实际Response body长度

    后端Spring boot+Java代码,显示指定Content-Length:response.setContentLength(17);
    访问图5域名,点击“show name”按钮,前端发送ajax请求服务端,服务端返回HTTP Response头部Content-Length: 17,但是实际上HTTP Response body长度为16字节,对应图2红色方框的seq 712:848,与图2红色方框一致。
    因为HTTP Response头部Content-Length: 17,所以浏览器一直等待第17个字节,不会解析实际上已经接收完服务端发送的HTTP Response body(16字节长度),等待一段时间后浏览器报net::ERR_CONTENT_LENGTH_MISMATCH,同时图5的Name:为空。

                                                                                   图5 前端页面访问后端

                                                                                   图6 前端页面访问后端tcpdump

    HTTP首部Content-Length使用场景

    当客户端向服务器请求一个静态页面或者一张图片时,服务器可以很清楚的知道内容大小,然后通过Content-length消息首部字段告诉客户端需要接收多少数据。
    HTTP首部定义Connection: keep-alive后,客户端、服务端怎么知道本次传输结束呢?静态页面通过Content-Length提前告知对方数据传输大小。


    以上就是  手写简单版Tomcat(一) 中关于为什么Content-Length会影响输出的解释,因为我觉得这篇文章写的非常通俗易懂,就把它拷过来了,下面是原文信息:

    作者:大头8086
    链接:https://www.jianshu.com/p/d606732f2ebc
    來源:简书

    不过虽然找到了解决的方法,但我还是很好奇

    文件不存在的时候,也设置了Content-Length,为什么这个就能一字不落的返回出来呢?

    然后我验证了一下,不管文件存不存在,我都输出内容的length长度

    控制台输出length是38

    抓包后看到响应长度也是38

    没有任何毛病,Response头部显示指定Content-Length就是等于实际Response body长度 ,所以能够完全展示出来

    下面来看下当我不设置Content-Length长度的时候,Content-Length实际是多少

    嗯哼,长度是6,因为不设置长度,所以浏览器能正常显示 

    下面是抓包结果

     实际长度是14,但是输出的length长度确实6

    整整少了一半多,所以加上

    "Content-Length: "+ line.length() +"\r\n" +

    后会显示不全 。

    那这是为什么呢?

    我个人目前认为,有几种可能性:

    1.String.length()造成的差异,导致String.length()和实际的消息实体长度不一致;

    2.String.length()没有错,也许一开始,实际的消息实体长度就是6,在HTTP传输过程中,扩大了至15。

    OK,既然有了怀疑,那就一个个排除

    先来看第一个

    我打个断点看看length()到底是怎样的:

     

    原来length是按多少个char来算的, 

    这样一想,好像确实没毛病,感觉就不能是String.length()的毛病了,

    不过发现个意外的东西,

    明明只有“范范范aa”,哪冒出来的'\uFEFF'介个,

    老样子,度娘一波,

    大概是这样的:

    Windows下用文本编辑器创建的文本文件,如果选择以UTF-8等Unicode格式保存,会在文件头(第一个字符)加入一个BOM标识。

    这个标识在Java读取文件的时候,不会被去掉,而且String.trim()也无法删除。如果用readLine()读取第一行存进String里面,这个String的length会比看到的大1,而且第一个字符就是这个BOM。

    这种情况会造成一些麻烦,比如在读取ini文件的时候,如果想判断第一行是不是以“[”开头就无法正确判断。

    幸好,Java在读取Unicode文件的时候,会统一把BOM变成“\uFEFF”,这样的话,就可以自己手动解决了(判断后,用substring()或replace()去除掉这个BOM)。
    原文在:https://blog.csdn.net/ClementAD/article/details/47168573

    感兴趣的童鞋可以去看看,我这就不改了,只是个小插曲,不能耽误正事儿。

    既然排除了第一个String.length(),那就来看看第二个,

    实际的消息实体长度,在HTTP传输过程中,扩大了,

    仔细一想,感觉怪怪的,

    同样是HTTP传输,404报错为什么就没扩大呢?

    除非这两个传输的东西有什么不同。

    OK,推翻之前的理论,同样的数据,重新来过。

    我把txt里的东西改成跟404报错是一样的

    然后重新访问下,

     

    因为没有设置Context-Length,所以能正常返回,

    访问1.txt的抓包截图:

     

    不访问文件的抓包截图:

     同样的内容,TXT里读出来的就是多了3长度,于是我尝试直接设置内容,而不从文件里读,看看结果是否一致

    重新运行,抓包如下

     长度一致。。。。。

    结果显而易见了。。。多出来的那个长度就是先前提到的,那个小插曲“\uFEFF”,这个东西占了3个长度

    OK,胜利在望,于是我把"\uFEFF"给去掉后代码如下

    import java.io.*;
    
    
    /*
      * Response的功能就是找到这个文件,使用Socket的outputStream把文件作为字节流输出给浏览器,就可以将我们的HTML显示给用户啦
      *
      */
    public class Response {
      public static final int BUFFER_SIZE = 2048;
      //浏览器访问D盘的文件
      private static final String WEB_ROOT ="D:";
      private Request request;
      private OutputStream output;
    
      public Response(OutputStream output) {
        this.output = output;
      }
      public void setRequest(Request request) {
        this.request = request;
      }
    
      public void sendStaticResource() throws IOException {
        byte[] bytes = new byte[BUFFER_SIZE];
        FileInputStream fis = null;
        try {
            //拼接本地目录和浏览器端口号后面的目录
          File file = new File(WEB_ROOT, request.getUrL());
          //如果文件存在,且不是个目录
          if (file.exists() && !file.isDirectory()) {
            fis = new FileInputStream(file);
            InputStreamReader reader = new InputStreamReader(fis,"UTF-8"); //最后的"GBK"根据文件属性而定,如果不行,改成"UTF-8"试试
            BufferedReader br = new BufferedReader(reader);
            String line;
            while ((line = br.readLine()) != null) {
              if(line.startsWith("\uFEFF")){
                line = line.replace("\uFEFF", "");
              }
              System.out.println(line + ":length:" + line.length());
              String retMessage = "HTTP/1.1 200 OK\r\n" +
                      "Content-Type: text/html;charset=utf-8\r\n" +
                      "Content-Length: "+ line.length() +"\r\n" +
                      "\r\n" +
                      line;
              output.write(retMessage.getBytes());
              System.out.print(retMessage);
            }
          }else {
               //文件不存在,返回给浏览器响应提示,这里可以拼接HTML任何元素
            String retMessage = "<h1>"+file.getName()+" file or directory not exists</h1>";
            System.out.println("length:" + retMessage.length());
            String returnMessage ="HTTP/1.1 404 File Not Found\r\n" +
                      "Content-Type: text/html;charset=utf-8\r\n" +
                      "Content-Length: "+retMessage.length()+"\r\n" +
                      "\r\n" +
                      retMessage;
            output.write(returnMessage.getBytes());
          }
        }
        catch (Exception e) {
          System.out.println(e.toString() );
        }
        finally {
          if (fis!=null)
            fis.close();
        }
      }
    }

    把txt文字恢复,重新运行,访问,走你!

    好的吧,乱码了

    先看看抓包

     去除了"\uFEFF"后是11个长度

    之前是14个长度

     果然,就是"\uFEFF"搞得鬼,在String.length()中"\uFEFF"只占一个长度,但是在HTTP传输中却占了3个长度,所以传输长度小于实体长度,导致页面文字显示不全,

    至于为什么乱码,很明显,String.length()是按多少个char来计算的,但是HTTP传输中,中文是比英文占的字节更大的,

    范范范aa,String.length()是5个长度,HTTP中确实11个长度,也就是说,HTTP中,中文占3个,英文占2个,

    在这里我设置了Context-Length等于String.length()也就是5个长度

    客户端在读取的时候也只会读5个长度的内容,也就是       范**

    因为2个长度不足以把中文读取出来,所以就是乱码了,

    试验一下,我把txt里的文字改下

    这个时候它应显示的是     范aa

     结果显示正确!!!!!!!

    OK,终于搞懂了,丢失的长度是在哪,

    虽然不是什么深的技术,但是作为一次教训,以此,写博客留念。

    欢迎大家提出建议。

    展开全文
  • matlab中length是什么意思?,matlab中的length表示什么?应该如何使用?大家好!matlab中length是什么意思?,matlab中的length表示什么?应该如何使用?匿名网友:length:数组长度即行数或列数中的较大值; 使用方法...
  • MySQL中length()、char_length()的区别和用法

    千次阅读 多人点赞 2020-06-08 14:37:44
    在MySQL中length(str)、char_length(str)都属于判断长度的内置函数,根据其得到字符串的长度。这两个方法的区别是我们面向SQL编程时容易采坑的地方,本文带你通俗易懂的了解这两个知识点。 目录 方法概述: ...
  • java -length的三种用法说明

    千次阅读 2021-02-26 21:11:18
    java中length主要有三种用法,本博客只介绍前两种:1 Java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性.2 java中的length()方法是针对字符串String说的,如果想...
  • Invalid array length

    千次阅读 2021-01-25 15:42:38
    问题报错: Invalid array length 原因数组长度为负数 team_total 和 sub_total 是有接口获取的数据, 在接口数据返回前渲染的时候, 两个数据还没有获取到, 去计算: 减去数组的长度, 使数组长度前加了负号, ...
  • Toast对应的LENGTH_SHORT和LENGTH_LONG分别是多长时间? 我们经常使用Toast,通过`LENGTH_SHORT`或者`LENGTH_LONG`,但没特别注意具体显示多长时间。今天突然看了一下`Toast.java`源码(`android-28`),发现代码...
  • Http协议Content-Length详解

    千次阅读 2020-04-08 18:12:43
    前言 ...本文通过一个线上实例,详细介绍http协议中的content-length字段。 问题 我们的手机App在做更新时会从服务器上下载的一些资源,一般都是一些小文件,更新的代码差不多是下面这样的: st...
  • 文章目录背景遇到的问题:1、当通过response header 获取content-length 的时候,千牛的url 没有返回 content-length2、涉及到鉴权的私有文件url 获取不到真正的content-length一、解决获取不到content-length问题...
  • MySQL length函数使用详解

    万次阅读 2022-02-26 17:09:25
    MySQL获取字符串的长度,MySQL中的length函数,MySQL length()
  • lengthlength()

    千次阅读 多人点赞 2020-07-29 19:52:46
    length()是求字符串中字符的个数; length是求字符串数组中字符串有几个。 运行结果:7 4
  • Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index 1 out of bounds for length 1 at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) at ...
  • Java File length()方法

    千次阅读 2021-02-26 16:43:47
    Java File length()方法java.io.File.length()返回此抽象路径名定义的文件的长度。如果此路径名定义了一个目录返回值未指定。1 语法public long length()2 参数无3 返回值该方法返回表示此抽象路径名的文件的长度,...
  • length 还是 length()?”在逛 programcreek 的时候,我发现了上面这个主题。说实话,我当时脑海中浮现出了这样一副惊心动魄的画面:面试官老马坐在我的对面,地中海式的发型令我敬佩有加。尽管略显疲惫,但他仍然...
  • 数组 length 方法 和 String length() 方法

    千次阅读 2019-10-31 12:04:15
    数组具有 length 属性 String 具有 length() 方法 数组具有 length 属性 用 数组变量名.length 可获得数组长度。 int[] arr = new int[8]; int lengthInt=arr.length; //获得数组长度 System.out.println...
  • Java String length()方法

    千次阅读 2020-07-13 12:44:52
    Java String length() function returns the length of the sequence of characters represented by this object. Java String length()函数返回此对象表示的字符序列的长度。 Java字符串长度 (Java String ...
  • ValueError: Length of values does not match length of index 翻译一下: ValueError: value的长度不匹配index的长度 很明显的错误: 学生源代码是: data["评价编号"] = np.where(data[data["评价"] == "好评...
  • 关于 the Short Blocklength Regime URLLC场景要求高可靠低延迟通信,其在QoS和包大小要求方面与传统实时通信业务有很大区别,举个例子: 传统VoIP业务: 最大排队时延50ms 时延违反概率0.02 最小数据包大小1500...
  • Java File length()用法及代码示例

    千次阅读 2021-02-26 16:43:52
    length()函数是Java中File类的一部分。该函数返回此抽象路径名为length表示的文件的长度。该函数返回代表位数的long值,如果文件不存在或发生异常,则返回0L。函数签名:public long length()用法:long var = file....
  • List length length() size() 区别与应用

    千次阅读 2020-06-15 15:34:07
    import java.util.ArrayList; import java.util.List; import org.apache.catalina.User;... //java中的length属性是针对数组,数组的长度则用到了length这个属性. String[] list = {"12","12","12
  • 前言看到这个标题的时候估计有小伙伴会说:一个字符的 String.length() 肯定是1呗,那还能是多少… 但是事实真的是这样吗…
  • C++中string.length()

    千次阅读 2021-02-24 12:03:00
    C++中string.length()返回类型是size_t,可以简单地认为是unsigned int 类型,即无符号类型,如果不经过转换就拿它和有符号类型进行比较,很容易发生错误。例如无符号整型i的值为0,当它减一的时候由于编码问题会变...
  • HTTP协议中的Content-Length

    千次阅读 2020-06-11 23:05:11
    Content-Length 是一个实体消息首部,用来指明发送给接受方的消息主体的大小。 Content-Length如果存在并且有效地话,则必须和消息内容的传输长度完全一致; Content-Length == 实际长度 const http = require('...
  • length:数组长度(即行数或列数中的较大值);使用方法:n=length(A):如果A为非空数组,返回行数和列数两者之间数值较大的那一个值,即相当于执行了max(size(A));如果A为空数组,则返回0;如果A是一个向量则返回A的...
  • length 还是 length()?” 在逛 programcreek 的时候,我发现了上面这个主题。说实话,我当时脑海中浮现出了这样一副惊心动魄的画面: 面试官老马坐在我的对面,地中海式的发型令我敬佩有加。尽管略显疲惫,但他仍然...
  • DB2 LENGTH判断字段是否有汉字

    千次阅读 2020-06-29 11:33:38
    The LENGTH function returns the length of expression in the implicit or explicit string unit. Read syntax diagramSkip visual syntax diagram >>-LENGTH--(--expression--+--------------------+--)---...
  • 转载于:https://www.cnblogs.com/abble/p/11068774.html
  • Matlab中length函数的使用

    千次阅读 2020-12-10 11:38:31
    length函数是求最大数组维度的长度。 一.语法 L = length(X) 1.输入参数 X-输入数组 标量|向量|矩阵|多维数组 输入数组,指定为标量、向量、矩阵或多维数组。 复数支持:是 提示 要计算字符串或字符...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,003,195
精华内容 2,001,278
关键字:

length