精华内容
下载资源
问答
  • 来看看传输层位于OSI七层协议和TCP/IP四层协议的位置:那么TCP和UDP的区别和使用场景分别是怎样的?我们用一个来对比一下UDP和TCP:TCPTCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,当应用程序采用...

    3d4fc98345660f6637407dd3b6b1af20.png

    上一篇聊完一文彻底搞懂 TCP三次握手、四次挥手过程及原理

    这次聊聊TCP和UDP的区别和场景

    TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP。来看看传输层位于OSI七层协议和TCP/IP四层协议的位置:

    22603fb75ae9619642fe1c33c800c9a7.png

    那么TCP和UDP的区别和使用场景分别是怎样的?我们用一个图来对比一下UDP和TCP:

    bcd026c018455994592ba6a9541b9c32.png

    TCP

    TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,当应用程序采用 TCP 发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端。TCP是面向面向字节流,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP就可以把它划分短一些再传送。

    TCP 为提供可靠性传输,实行“顺序控制”或“重发控制”机制。此外还具备“流控制(流量控制)”、“拥塞控制”、提高网络利用率等众多功能。

    TCP有以下特点:

    • TCP充分地实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。而这些在 UDP 中都没有。
    • 此外,TCP 作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。
    • 根据 TCP 的这些机制,在 IP 这种无连接的网络上也能够实现高可靠性的通信( 主要通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现)。

    UDP

    UDP 是面向报文的,所谓面向报文,是指面向报文的传输方式是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。若报文太长,则IP层需要分片,降低效率。若太短,会是IP太小。

    UDP 是不具有可靠性的数据报协议,细微的处理它会交给上层的应用去完成。在 UDP 的情况下,虽然可以确保发送消息的大小,却不能保证消息一定会到达。因此,应用有时会根据自己的需要进行重发处理。

    UDP有以下特点:

    • UDP 不提供复杂的控制机制,利用 IP 提供面向无连接的通信服务。
    • 传输途中出现丢包,UDP 也不负责重发。
    • 当包的到达顺序出现乱序时,UDP没有纠正的功能。
    • 并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。即使是出现网络拥堵的情况,UDP 也无法进行流量控制等避免网络拥塞行为。
    • 如果需要以上的细节控制,不得不交由采用 UDP 的应用程序去处理。
    • UDP 常用于以下几个方面:
      • 1.包总量较少的通信(DNS、SNMP等);
      • 2.视频、音频等多媒体通信(即时通信);
      • 3.限定于 LAN 等特定网络中的应用通信;
      • 4.广播通信(广播、多播)。

    UDP 和 TCP 的应用

    他们的应用如下图:

    ad0f31d095d8d166b6f38f2096979661.png

    总结:

    TCP 和 UDP 的优缺点无法简单地、绝对地去做比较:TCP 用于在传输层有必要实现可靠传输的情况;而在一方面,UDP 主要用于那些对高速传输和实时性有较高要求的通信或广播通信。TCP 和 UDP 应该根据应用的目的按需使用。

    最后

    文章如果对你有收获,可以收藏转发,这会给我一个大大鼓励哟!另外可以关注我公众号「码农富哥」,我会持续输出Python,服务器端架构,计算机基础的 原创 文章

    展开全文
  • 在之前的 JavaScript 简介中,对于JavaScript 应该有一个大致的了解了,那么接下来,我们来看看 JavaScript 在网页中的控制行为是怎样一回事!! 1. 关于点击调整字体(Font)的一些属性: 效果: 实现代码...

    在之前的 JavaScript 简介中,对于JavaScript 应该有一个大致的了解了,那么接下来,我们来看看 JavaScript 在网页中的控制行为是怎样一回事!!

     

    1. 关于点击调整字体(Font)的一些属性:

    效果图:

    实现代码:

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>新闻广告</title>
    <style type="text/css">
    <!-- 伪元素选择器 -->
    a:link,a:visited {
        color:#FF9900;
        text-decoration:none;
        font-size:15px;
        }
        
    a:hover {
        color:#0099FF;
        }
        
    .middle {
        border:#0099FF 1px solid;
        font-size:16px;
        width:400px;
        }
        
    /*
    预先定一些选择器
    */
    .max {
        border:#0099FF 1px solid;
        font-size:20px;
        color:#FF0000;
        background-color:#CCFFFF;
        width:400px;
        }
        
    .min {
        border:#0099FF 1px solid;
        font-size:12px;
        color:#0000FF;
        background-color:#FFFFFF;
        width:400px;
        }
    
    </style>
    
    <script type="text/javascript">
        function resize(size){
            //获取div
            var oDiv = document.getElementById("newstext");
            //把参数赋值给div的class属性
            oDiv.className = size;
        }
    </script>
    </head>
    
    <body>
        <h2>这是一个大新闻.</h2>
        <a href="javascript:void(0)" onclick="resize('min')">小字体</a> 
        <a href="javascript:void(0)" onclick="resize('middle')">中字体</a> 
        <a href="javascript:void(0)" onclick="resize('max')">大字体</a> 
        <hr />
        
        <div id="newstext" class="middle">
        演示接口.很多内容.怎么办呢?等等<br />
        演示接口.很多内容.怎么办呢?等等<br />
        演示接口.很多内容.怎么办呢?等等<br />
        演示接口.很多内容.怎么办呢?等等<br />
        演示接口.很多内容.怎么办呢?等等<br />
        演示接口.很多内容.怎么办呢?等等<br />
        演示接口.很多内容.怎么办呢?等等<br />
        演示接口.很多内容.怎么办呢?等等<br />
        </div>
    
    </body>
    </html>

     

    2. 关于 Checkbox 的一些应用:

    效果图:

    实现代码:

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>全选反选问题</title>
    <script>
        function checkAll(obj){
            //让所有item的状态和全选保持一致
            var items = document.getElementsByName("item");
            for(var i=0; i<items.length; i++){
                items[i].checked = obj.checked;
            }
        }
        
        window.onload = function(){    //当页面加载完成后获取所有的item
            //获取所有的item, 给每一个item添加点击事件: 判断所有的item是否被选中, 如果是, 全选应该被选中, 如果不是, 全选应该取消!
            var items = document.getElementsByName("item");
            for(var i=0; i<items.length; i++){
                items[i].onclick = function(){
                    var flag = true;
                    for(var j=0; j<items.length; j++){
                        if(!items[j].checked){
                            flag = false;
                            break;
                        }
                    }
                    document.getElementById("all1").checked = flag;
    
                    /*if(flag){
                        document.getElementById("all1").checked = true;
                    }else{
                        document.getElementById("all1").checked = false;
                    }*/
                }
            }
            
        }
    
    
        function check(){
            //获取所有的item, 将每一个item的状态取反.
            var items = document.getElementsByName("item");
            for(var i=0; i<items.length; i++){
                items[i].checked = !items[i].checked;
            }
    
            //==============================
            //判断所有的item是否被选中, 如果是, 全选应该被选中, 如果不是, 全选应该取消!
            var flag = true;
            for(var j=0; j<items.length; j++){
                if(!items[j].checked){
                    flag = false;
                    break;
                }
            }
            document.getElementById("all1").checked = flag;
        }
    
        function getSum(){
            //获取所有的item, 循环遍历, 依次判断每一个item是否被选中, 如果是累加value
            var items = document.getElementsByName("item");
            var sum = 0;
            for(var i=0; i<items.length;i++){
                if(items[i].checked){
                    sum +=     parseFloat(items[i].value);    
                }
            }
            document.getElementById("sumId").innerHTML = "总金额为: "+sum;
        }
    
        
    
        
        
    </script>
    </head>
    
    <body>
    <div>商品列表</div>
    <input type="checkbox" name="item" value="3000" />笔记本3000元<br />
    <input type="checkbox" name="item" value="2500"/>HTC手机2500<br />
    <input type="checkbox" name="item" value="8000" />苹果电脑8000<br />
    <input type="checkbox" name="item" value="1500" />IPAD1500<br />
    <input type="checkbox" name="item" value="400" />玩具汽车400<br />
    
    <input type="checkbox" id="all1" name="all" onclick="checkAll(this)"/>全选<br />
    <input type="checkbox" id="all2" name="all" onclick="check()"/>反选<br />
    
    <input type="button" value="总金额" onclick="getSum()" /><span id="sumId"></span>
    </body>
    </html>

     

    3.关于 Radiobutton 的一些使用:

    效果图:

    <!DOCTYPE HTML>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>单选按钮</title>
        <style type="text/css">
            #all div{
                display:none;
            }
        </style>
        <script type="text/javaScript">
            function show(obj){
                var oDiv = document.getElementById("result"+obj.value);
                var aDiv = document.getElementById("all").getElementsByTagName("div");
                for(var i=0; i<aDiv.length; i++){
                    aDiv[i].style.display = "none";
                }
                oDiv.style.display = "block";
            }
        </script>
    </head>
    
    <body>
        <div>
            <h3>测试你的性格:</h3>
            <div>请选择下列一种水果:</div>
            <input type="radio" name="fruit" value="1" onclick="show(this)" />苹果<br />
            <input type="radio" name="fruit" value="2"  onclick="show(this)" />西瓜<br />
            <input type="radio" name="fruit" value="3"  onclick="show(this)"/>葡萄<br />
            <input type="radio" name="fruit" value="4"  onclick="show(this)"/>芒果<br />
            
            <div id="all">
                <div id="result1">
                    您的性格,很羞涩.
                </div>
                <div id="result2">
                    您的性格,很开朗.
                </div>
                <div id="result3">
                    您的性格,很内向.
                </div>
                <div id="result4">
                    您的性格,很醇香.
                </div>
            </div>
        </div>
    </body>
    </html>

     

    4. 关于 creatTable 的一些使用:

    效果图:

    实现代码:

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>创建表格</title>
    <!-- 定义一些样式,将来给表格用 -->
    <style type="text/css">
    table{
        border:#0099FF 1px solid;
        width:600px;
        border-collapse:collapse;
    }
        
    table td{
        border:#0099FF 1px solid;
        padding:10px 20px 3px 1px; 
    }
    </style>
    <script type="text/javascript">
        //创建单行单列的表格
        function createTable(){
            //创建表格元素
            var table = document.createElement("table");
            //创建表格行元素
            var tr = document.createElement("tr");
            //创建单元格元素
            var td = document.createElement("td");
            td.innerHTML = "我是td, 我最牛~!"; //给单元格设置文本
            tr.appendChild(td);    //将单元格添加到表格行上
            table.appendChild(tr); //将表格行添加到表格上
            //将创建好的整个table挂载到div上
            document.getElementById("tab").appendChild(table);
        }
    
        //创建5行6列的表格
        function createTable2(){
            //创建table标签
            var table = document.createElement("table");
            for(var r = 0;r<5;r++){ //外层循环控制行数
                var tr = document.createElement("tr");
                //创建table标签
                for(var c = 0;c<6;c++){ //内层循环控制列(单元格)数
                    var td = document.createElement("td");
                    td.innerHTML = (r+1)+""+(c+1)+"";
                    //将td挂载到tr上
                    tr.appendChild(td)
                }
                //将tr挂载到table上
                table.appendChild(tr);
            }
            //将创建好的整个table挂载到div上
            document.getElementById("tab").appendChild(table);
        }
    
        //创建指定行和列的表格
        function createTable3(){
            //获取用户输入的行数
            var row = document.getElementById("row").value;
            //获取用户输入的列数
            var col = document.getElementById("col").value;
            
            var table = document.createElement("table");
            for(var r = 0;r<row;r++){
                var tr = document.createElement("tr");
                for(var c = 0;c<col;c++){
                    var td = document.createElement("td");
                    td.innerHTML = (r+1)+""+(c+1)+"";
                    tr.appendChild(td)
                }
                table.appendChild(tr);
            }
            //将创建好的整个table挂载到div上
            document.getElementById("tab").appendChild(table);
        }
    </script>
    </head>
    <body>
        <input type="button" value="创建表格" onclick="createTable()" /><br />
    
        <input type="button" value="创建表格(5行6列)" onclick="createTable2()" /><br />
    
        行数:<input type="text" name="row" id="row"/><br />
        列数:<input type="text" name="col" id="col"/><br />
        <input type="button" name="createButton" value="创建表格(行列用户输入)" onclick="createTable3()" />
        <div id="tab">
                
        </div>
    </body>
    </html>

     

    5. 关于 Table 的使用(实现隔行变色):

    效果图:

    实现代码:

    <!DOCTYPE HTML>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>表格的操作</title>
        <style type="text/css">
            table {
                border:#0099FF 1px solid;
                width:500px;
                border-collapse:collapse;
            }
            table th, table td {
                border:#0099FF 1px solid;
                padding:10px 0px 10px 10px;
            }
            table th {
                background-color:#00CCFF;
            }
    
            .one {
                background-color:#CCFF66;
            }
            .two {
                background-color:#897af1;
            }
            .over {
                background-color:#FF0000;
            }
            div{
                text-align: center;
                padding:20px;
                color:red;
            }
        </style>
        
        <script type="text/javascript">
            window.onload = function(){
                alert("效果1: 隔行变色");
                //获取所有的tr
                var aTr = document.getElementsByTagName("tr");
                //循环遍历
                for(var i=1; i<aTr.length; i++){
                    if(i%2 == 0){//奇(偶)数行,设置为one
                        aTr[i].className = "one";
                    }else{//偶(奇)数行,设置为one
                        aTr[i].className = "two";
                    }
                    //------------------------------
                    var classNameTemp;
                    //光标移入元素时
                    aTr[i].onmouseover = function(){
                        classNameTemp = this.className;//记住改变之前的class
                        this.className = "over";
                    }
                    //光标移出元素时
                    aTr[i].onmouseout = function(){
                        this.className = classNameTemp;
                    }
                }
            }
        </script>
    </head>
    <body>
        <table align="center">
            <tr>
                <th>电影名称</th>
                <th>电影介绍</th>
                <th>主演名单</th>
            </tr>
            <tr>
                <td>变形金刚</td>
                <td>很不错的电影</td>
                <td>机器人</td>
            </tr>
            <tr>
                <td>唐伯虎点秋香</td>
                <td>非常好的电影</td>
                <td>周星驰,巩俐</td>
            </tr>
            <tr>
                <td>东邪西毒</td>
                <td>群星云集的电影</td>
                <td>张国荣,梁朝伟...</td>
            </tr>
            <tr>
                <td>少林足球</td>
                <td>最厉害的足球电影</td>
                <td>周星驰,赵薇</td>
            </tr>
            <tr>
                <td>赌神</td>
                <td>小马哥演绎赌神</td>
                <td>周润发</td>
            </tr>
            <tr>
                <td>大话西游</td>
                <td>超级搞笑的电影</td>
                <td>周星驰</td>
            </tr>
            <tr>
                <td>疯狂的石头</td>
                <td>一部让人大笑不止的电影</td>
                <td>黄渤</td>
            </tr>
        </table>
        <div>(效果2: 试试将鼠标移入到表格行内...)</div>
    </body>
    </html>

     

    6. 表格按需要排序:

    效果图:

    实现代码:

    <!DOCTYPE HTML>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>表格中的数据排序</title>
        <style type="text/css">
            table {
                border:#0099FF 1px solid;
                border-collapse:collapse;
                width:600px;
                font-family: "微软雅黑";
                margin-top: 50px;
            }
            table td{
                border:#0099FF 1px solid;
                text-align:center;
            }
            #age:link,#age.visited {
                color:#000000;
            }
            div{
                text-align: center;
                padding:20px;
                color:red;
            }
        </style>
        <script type="text/javaScript">
            function sort(){
                //冒泡排序
                var aTr = document.getElementsByTagName("tr");//获取所有的tr
                //循环遍历所有的tr(第一行为表头不算, i和j从1开始)
                for(var i=1; i<aTr.length-1; i++){
                    for(var j=1; j<aTr.length-i; j++){
                        //获取第j行的年龄
                        var age1 = parseInt(aTr[j].getElementsByTagName("td")[1].innerHTML);
                        //获取第j+1行的年龄
                        var age2 = parseInt(aTr[j+1].getElementsByTagName("td")[1].innerHTML);
                        //比较年龄
                        if(age1>age2){//升序排序
                            /*var temp = aTr[j];
                            aTr[j] = aTr[j+1];
                            aTr[j+1] = temp;*/ //这种方式是错的!!!
                            //1.方式一
                            /*
                                var cloneAtr1 = aTr[j].cloneNode(true);
                                var cloneAtr2 = aTr[j+1].cloneNode(true);
                                aTr[j].parentNode.replaceChild(cloneAtr1 , aTr[j+1]);
                                aTr[j].parentNode.replaceChild(cloneAtr2 , aTr[j]);
                            */
                            //2.方式二
                            var temp = aTr[j].innerHTML;
                            aTr[j].innerHTML = aTr[j+1].innerHTML;
                            aTr[j+1].innerHTML = temp;
                        }
                    }
                }
            }
        </script>
    </head>
    <body>
        <table align="center" cellpadding="10">
            <tr>
                <th>姓名</th>
                <th onclick="sort()" style="cursor:pointer;">年龄</th>
                <th>地址</th>
            </tr>
            <tr>
                <td>张三</td>
                <td>25</td>
                <td>北京</td>
            </tr>
            <tr>
                <td>李四</td>
                <td>23</td>
                <td>天津</td>
            </tr>
            <tr>
                <td>王五</td>
                <td>28</td>
                <td>上海</td>
            </tr>
            <tr>
                <td>赵六</td>
                <td>26</td>
                <td>南京</td>
            </tr>
            <tr>
                <td>周七</td>
                <td>22</td>
                <td>上海</td>
            </tr>
        </table>
        <div>(效果: 试试点击年龄...表格行会按照年龄大小进行排列)</div>
    </body>
    </html>

     

    7. 一个综合:

    效果图:

    <!DOCTYPE HTML>
    <html>
        <head>
            <title>表单页面</title>
            <meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
            <script type="text/javascript">
                //表单被提交时会触发onsubmit事件, 驱动该方法执行
                function checkForm(){
                    var flag = true;
                    //非空校验
                    flag = checkNull("username", "用户名不能为空") && flag;
                    flag = checkNull("password", "密码不能为空") && flag;
                    flag = checkNull("password2", "确认密码不能为空") && flag;
                    flag = checkNull("nickname", "昵称不能为空") && flag;
                    flag = checkNull("email", "邮箱不能为空") && flag;
                    flag = checkNull("img", "头像不能为空") && flag;
                    flag = checkNull("valistr", "验证码不能为空") && flag;
                    flag = checkGenderAndLike("gender", "性别不能为空") && flag;
                    flag = checkGenderAndLike("like", "爱好不能为空") && flag;
                    flag = checkPassword("password", "两次密码不一致") && flag;
                    flag = checkEmail("email", "邮箱格式不正确") && flag;
                    
                    return flag;
                }
    
                //检查邮箱格式
                function checkEmail(name, msg){
                    var email = document.getElementsByName(name)[0].value;
                    setMsg(name, "");
                    if(email == ""){
                        setMsg(name, "邮箱不能为空");
                    }else{
                        var reg = /^\w+@\w+(\.\w+)+$/;
                        
                        if(!reg.test(email)){
                            setMsg(name, msg);
                            return false;
                        }
                    }
                    return true;
                }
    
                //检查两次密码是否一致
                function checkPassword(name, msg){
                    var psw = document.getElementsByName(name)[0].value;
                    var psw2 = document.getElementsByName(name+"2")[0].value;
                    setMsg(name+"2", "");
                    if(psw2 == ""){
                        setMsg(name+"2", "确认密码不能为空");
                        return false;
                    }
                    if(psw != "" && psw2 != "" && psw != psw2){
                        setMsg(name+"2", msg);
                        return false;
                    }
                    return true;
                }
    
                //检查性别和爱好
                function checkGenderAndLike(name, msg){
                    var flag = false;
                    //获取所有的选框, 遍历, 只要有一个被选中, 就校验通过
                    var objs = document.getElementsByName(name);
                    for(var i=0; i<objs.length; i++){
                        if(objs[i].checked){
                            flag = true;
                        }
                    }
                    setMsg(name, "");
                    if(!flag){
                        setMsg(name, msg);
                        return false;
                    }
                    return true;
                    
                }    
    
                //当输入框失去焦点时
                function onblurTA(obj){
                    if(obj.value == ""){
                        obj.value = "请输入描述信息~!";
                    }
                }
                //当输入框获得焦点时
                function onfocusTA(obj){
                    if(obj.value == "请输入描述信息~!"){
                        obj.value = "";
                    }
                }
    
                //检查指定name的输入框是否为空, 如果为空给出提示消息
                function checkNull(name, msg){
                    var value = document.getElementsByName(name)[0].value;
                    setMsg(name, "" );
                    if(value == ""){
                        //alert(msg);
                        setMsg(name, msg);
                        return false;
                    }
                }
    
                //设置提示消息的方法
                function setMsg(name, msg){
                    document.getElementById(name+"_msg").innerHTML = "<font style='color:red;font-size: 12px;'>"+ msg +"</font>";
                }
            </script>
        </head>
        <body>
            <form action="http://localhost:8080" method="POST" onsubmit="return checkForm()" >
                <table border="1px" align="center" cellpadding="10px" cellspacing="0px" borderColor="red" bgcolor="pink">
                    <caption><font color="red" size="6">注册表单</font></caption>
                    <input type="hidden" name="id" value="9527"/>
                    <tr>
                        <td>用户名:</td>
                        <td>
                            <input type="text" name="username" onblur="checkNull('username', '用户名不能为空')"/>
                            <span id="username_msg" ></span>
                        </td>
                    </tr>
                    <tr>
                        <td>密码:</td>
                        <td>
                            <input type="password" name="password"  onblur="checkNull('password', '密码不能为空')"/>
                            <span id="password_msg" ></span>
                        </td>
                    </tr>
                    <tr>
                        <td>确认密码:</td>
                        <td>
                            <input type="password" name="password2"  onblur="checkPassword('password', '两次密码不一致')"/>
                            <span id="password2_msg" ></span>
                        </td>
                    </tr>
                    <tr>
                        <td>性别:</td>
                        <td>
                            <input type="radio" name="gender" value="男"/><input type="radio" name="gender" value="女"/><span id="gender_msg" ></span>
                        </td>
                    </tr>
                    <tr>
                        <td>昵称:</td>
                        <td>
                            <input type="text" name="nickname"  onblur="checkNull('nickname', '昵称不能为空')"/>
                            <span id="nickname_msg" ></span>
                        </td>
                    </tr>
                    <tr>
                        <td>邮箱:</td>
                        <td>
                            <input type="text" name="email"  onblur="checkEmail('email', '邮箱格式不正确')"/>
                            <span id="email_msg" ></span>
                        </td>
                    </tr>
                    <tr>
                        <td>爱好:</td>
                        <td>
                            <input type="checkbox" name="like" value="lq"/>篮球
                            <input type="checkbox" name="like" value="zq"/>足球
                            <input type="checkbox" name="like" value="qq"/>铅球
                            <input type="checkbox" name="like" value="blq"/>玻璃球
                            <span id="like_msg" ></span>
                        </td>
                    </tr>
                    <tr>
                        <td>客户类型:</td>
                        <td>
                            <select name="type">
                                <option value="pm">平民</option>
                                <option value="sxdy">少先队员</option>
                                <option value="gqty">共青团员</option>
                                <option value="ybdy">预备党员</option>
                                <option value="zsdy">正式党员</option>
                            </select>
                            
                        </td>
                    </tr>
                    <tr>
                        <td>头像:</td>
                        <td>
                            <input type="file" name="img" />
                            <span id="img_msg" ></span>
                        </td>
                    </tr>
                    <tr>
                        <td>描述信息:</td>
                        <td>
                            <textarea id="desc" rows="5" cols="45" name="desc" onblur="onblurTA(this)" onfocus="onfocusTA(this)">请输入描述信息~!</textarea>
                            <span id="desc_msg" ></span>
                        </td>
                    </tr>
                    <tr>
                        <td>验证码:</td>
                        <td>
                            <input type="text" name="valistr"  onblur="checkNull('valistr', '验证码不能为空')"/>
                            <img src="1.jpg" width="100px" height="20px"/>
                            <span id="valistr_msg" ></span>
                        </td>
    
                    </tr>
                    <tr>
                        <td colspan="2" align="right">
                            <input type="submit" value="提 交"/>
                            <input type="reset" value="重 置"/>
                        </td>
                    </tr>
                </table>
            </form>
        </body>
    </html>

     

    转载于:https://www.cnblogs.com/tangdiao/p/9481681.html

    展开全文
  • 车牌识别技术实现方式及应用场景

    千次阅读 2016-10-24 10:09:53
    车牌识别技术是计算机视频图像识别技术在车辆牌照识别中的一种应用,那么车牌识别技术实现方式是怎样的呢? 一、车牌识别技术实现方式  车辆牌照的识别是基于图像分割和图像识别理论,对含有车辆号牌的图像...

    车牌识别技术是计算机视频图像识别技术在车辆牌照识别中的一种应用,那么车牌识别技术实现方式是怎样的呢?

    一、车牌识别技术实现方式
      车辆牌照的识别是基于图像分割和图像识别理论,对含有车辆号牌的图像进行分析处理,从而确定牌照在图像中的位置,并进一步提取和识别出文本字符。
      识别步骤概括为:车牌定位、车牌提取、字符识别。三个步骤地识别工作相辅相成,各自的有效率都较高,整体的识别率才会提高。识别速度的快慢取决于字符识别,字符的识别目前的主要应用技术为比对识别样本库,即将所有的字符建立样本库,字符提取后通过比对样本库实现字符的判断,识别过程中将产生可信度、倾斜度等中间结果值;另一种是基于字符结构知识的字符识别技术,更加有效的提高识别速率和准确率,适应性较强。
      车牌识别系统实现的方式主要分为两种:一种是静态图像图片的识别,另一种是动态视频流的实时识别。静态图像识别技术的识别有效率较大程度上受限于图像的抓拍质量,为单帧图像识别,目前市场产品识别速度平均为200毫秒;而动态视频流的识别技术适应性较强,识别速度快,它实现了对视频每一帧图像进行识别,增加识别比对次数,择优选取车牌号,关键在于较少的受到单帧图像质量的影响,目前市场产品识别较好的时间为10毫秒。



    二、车牌识别技术的应用
      车牌识别在高速公路车辆管理中得到广泛应用,电子收费(ETC)系统中,也是结合DSRC技术识别车辆身份的主要手段。
      在停车场管理中,车牌识别技术也是识别车辆身份的主要手段。在深圳市公安局建设的《停车库(场)车辆图像和号牌信息采集与传输系统技术要求》中,车牌识别技术成为车辆身份识别的主要手段。
      车牌识别技术结合电子不停车收费系统(ETC)识别车辆,过往车辆通过道口时无须停车,即能够实现车辆身份自动识别、自动收费。在车场管理中,为提高出入口车辆通行效率,车牌识别针对无需收停车费的车辆(如月卡车、内部免费通行车辆),建设无人值守的快速通道,免取卡、不停车的出入体验,正改变出入停车场的管理模式。

    展开全文
  • BetterScroll 是一款重点解决移动端各种滚动场景需求的开源插件( GitHub地址 ),适用于滚动列表、选择器、轮播、索引列表、开屏引导等应用场景。 为了满足这些场景,它不仅支持惯性滚动、边界回弹、滚动条淡入...
  • 那么TCP和UDP的区别和使用场景分别是怎样的? 我们用一个来对比一下UDP和TCP: TCP TCP 是面向连接的、可靠的流协议。 流就是指不间断的数据结构,当应用程序采用 TCP 发送消息时,虽然可以保证发送的顺序,但...

    TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP。

    来看看传输层位于OSI七层协议和TCP/IP四层协议的位置:
    在这里插入图片描述

    那么TCP和UDP的区别和使用场景分别是怎样的?

    我们用一个图来对比一下UDP和TCP:
    在这里插入图片描述

    TCP

    TCP 是面向连接的、可靠的流协议
    流就是指不间断的数据结构,当应用程序采用 TCP 发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端。
    TCP 为提供可靠性传输,实行“顺序控制”或“重发控制”机制。此外还具备“流控制(流量控制)”、“拥塞控制”、提高网络利用率等众多功能。

    TCP有以下特点:

    TCP充分地实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。而这些在 UDP 中都没有。
    此外,TCP 作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费
    根据 TCP 的这些机制,在 IP 这种无连接的网络上也能够实现高可靠性的通信( 主要通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现)。

    UDP

    UDP 是面向报文的,所谓面向报文,是指面向报文的传输方式是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。若报文太长,则IP层需要分片,降低效率。若太短,会是IP太小。
    UDP 是不具有可靠性的数据报协议,细微的处理它会交给上层的应用去完成。在 UDP 的情况下,虽然可以确保发送消息的大小,却不能保证消息一定会到达。因此,应用有时会根据自己的需要进行重发处理。

    UDP有以下特点:

    UDP 不提供复杂的控制机制,利用 IP 提供面向无连接的通信服务。
    传输途中出现丢包,UDP 也不负责重发。
    当包的到达顺序出现乱序时,UDP没有纠正的功能。
    并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。即使是出现网络拥堵的情况,UDP 也无法进行流量控制等避免网络拥塞行为
    如果需要以上的细节控制,不得不交由采用 UDP 的应用程序去处理。
    UDP 常用于以下几个方面:

    1.包总量较少的通信(DNS、SNMP等);
    2.视频、音频等多媒体通信(即时通信);
    3.限定于 LAN 等特定网络中的应用通信;
    4.广播通信(广播、多播)。

    UDP 和 TCP 的应用

    他们的应用如下图:

    在这里插入图片描述

    总结:
    TCP 和 UDP 的优缺点无法简单地、绝对地去做比较:TCP 用于在传输层有必要实现可靠传输的情况;

    而在一方面,UDP 主要用于那些对高速传输和实时性有较高要求的通信或广播通信。TCP 和 UDP 应该根据应用的目的按需使用。

    展开全文
  • 原创文章出自公众号:「码农富哥」,如需转载请注明出处! 文章如果对你有收获,可以收藏转发!另外可以关注我公众号「码农富哥」,我会持续输出...那么TCP和UDP的区别和使用场景分别是怎样的? 我们用一个来对...
  • 来看看传输层位于OSI七层协议和TCP/IP四层协议的位置:那么TCP和UDP的区别和使用场景分别是怎样的?我们用一个来对比一下UDP和TCP:TCPTCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,当应用程序采用...
  • 经常有网站运营公司咨询这样的应用场景:公司有多个网站,不同网站有不同用途(外观和知识),每个人工坐席同时应对来自多个网站的问询,怎样实现智能客服的统一管理?其实,这涉及到智能客服系统是否能够集中统一...
  • 怎样用Unity Terrain工具制作美观的场景(三) 1.前言 在上一篇文章中,我们提到本文我们会讲述如何将地形覆盖上贴图。 2.正文 上面两张便是将地形附上贴图后的效果。 但这是最简单的应用,简单到只要你有一张贴...
  • 超级电容具有怎样地特性使得它受到了用户的青睐呢?​技术原理我们以双电层电容为例,介绍超级电容的工作原理。双电层超级电容是靠极化电解液来储存电能的一种新型储能装置,其原理结构如所示。在双层电容器中,...
  • python实现将深度学习应用于医学图像以辅助医疗

    千次阅读 多人点赞 2018-04-21 14:54:32
     运用深度学习技术进行图像和视频分析,并将它们用于自动驾驶汽车、无人机等多种应用场景中已成为研究前沿。近期诸如《A Neural Algorithm of Artistic Style》等论文展示了如何将艺术家的风格转移并应用到另一张...
  • 不同图表类型的最佳应用场景?本文将为你解开这些谜团。 (一) 为什么须要使用图表功能 图表是一种将数据以图形方式显示的可视化手段,多用于实现下面需求: 1. 让数据更易于阅读和理解 2. 展示数据数据对照 3. ...
  • 小同伴们问,上面这个图怎样画进去的,固然外型算不上出格美观,但仍是想晓得用PPT能绘制进去吗?PPT便是个简略单纯“绘图”软件,无所事事,呵呵 场景:财政、人士、物流、商务部停止PPT封面计划的办公人士。 ...
  • 摘要: 伴随着近几年O2O的爆发,网络已经不仅是... 同时,网络内容形态的进阶发展,网页内容已经从静态的图片、文字向短视频、直播演变,网站和应用的内容变得越来越复杂。 伴随着近几年O2O的爆发,网络已经不仅是...
  • 多线程在随着cpu发展应用的是越来越多,游戏场景因为其在服务器所占的数据量与逻辑复杂度的原因必须依赖于它。为什么场景要采用多线程?场景的线程是怎样的?场景的线程又是如何创建的?场景的线程又是怎样管理的?...
  • 怎样用好Eucalyptus

    2013-03-22 11:57:42
    市场规模很大,客户需求以及应用场景之间的差别很大,并不存在一个能够通吃所有应用场景的云管 理平台。未来Eucalyptus、CloudStack、OpenStack和OpenNebula这四个云管理平台之间既 有 也 有合作, 在 合作 存的 系...
  • 对于简单场景而言,体验应该还好,但对于一些状态多,变化频繁的复杂场景而言,不仅要时刻维护本地数据状态和地图状态同步,还要查找设置各种状态的地图API,实在是让人头疼的事情。 设计vue-amap的初衷,也就是为了...
  • 本文将对这三种开发方案的性能进行深度对比,包括它们在多个应用场景下 FPS、CPU、内存和 GPU 方面的性能。玩转前端二进制本文阿宝哥将按照以下的流程来介绍前端如何进行图片处理,然后穿插介绍二进制、B...
  • 点击标题即可查看原文奇妙的 CSS MASK:...本文将对这三种开发方案的性能进行深度对比,包括它们在多个应用场景下 FPS、CPU、内存和 GPU 方面的性能。玩转前端二进制本文阿宝哥将按照以下的流程来介绍前端如何进行...
  • SimpleWaveform[说明:以前画过波形,...实现上很简单,关键在于,怎样简单,又可灵活定制来适用于通常的应用场景。比如在画图之外增加了进度条及触碰反馈功能,就可适用于录音及播音的场景]SimpleWaveform 显示一...
  • 一、应用场景在 WEB 网站中,图片验证码经常被用来防止恶意地用户注册、发帖等场景。在 PHP 中,图片验证码主要是通过 GD 库提供的 API 来完成的。二、实现的方法验证码一般都是随机的数字和字母组合的,可以通过...
  • 场景学以致用,有具体的应用场景,能够加深我们对知识的掌握。我们以简书的文章列表为例,如下:假设产品有这样的需求,当右边的封面加载失败的时候,用一个默认图片替换或者直接让文本横向填充原有图片位置。...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 295
精华内容 118
关键字:

怎样应用场景图