基于TCP和二十四线程完结无线鼠标键盘-Socket(1)

把手机作为活动鼠标、键盘使用尤其便利,本文将落成这一成效。该使用分为两部分:Windows服务端和Android客户端。

throw抛出自定义错误类型

语法:throw exception;

exception 能够是其他类型的数目 如:

throw 12345;

throw ‘hello’;

throw true;

throw {name:’Joel’,age:20};

使用throw语句来抛出一个自定义很是 如:

 1 <script>
 2     function see(){
 3         try {
 4             if(true){
 5                 throw new Error("my eroor!");
 6             }
 7 
 8         } catch (error) {
 9             console.log(error.name );//Error
10             console.log(error.message);//my eroor!
11             console.log(error.stack);//Error: my eroor! at see (try.html:12) at try.html:22
12         }
13     }
14     see();
15 </script>

图片 1

语法结构

try catch finally是ECMAScript-262
第三版提供丰裕处理体制的标准,语法结构如下:

1 try{
2 //可能会发生的错误代码
3 }
4 catch(error){
5 //错误处理
6 }finally{
7  //无论是否有异常都会执行
8 }

语法与半数以上语言同样 如java
.net,借使try{}代码块捕获到了十分,那么catch块会得到一个错误音信对象(Error
的实例)。

咱俩理应把有可能爆发错误的代码放在try块中,而错误处理在catch块中;在js中只要<script></script>代码块中生出了不当且并未展开捕获很是处理,那么当前<script>代码块后续的代码是不会履行的
,可是不会影响到此外<script></script>代码块代码如:

 1 <script>
 2   function run(){
 3       console.log(age);
 4   }
 5     run();
 6     console.log('可以输出吗?');//没有执行
 7 </script>
 8 
 9 <script>
10     console.log('这是第二个代码块');//执行了,这是第二个代码块
11 </script>

反之后续的代码依然会实施 如:

 1 <script>
 2   function run(){
 3       try{
 4           console.log(age);
 5       }catch(error){
 6 
 7       }
 8 
 9   }
10     run();
11     console.log('可以输出吗?');//可以输出吗?
12 </script>
13 
14 <script>
15     console.log('这是第二个代码块');//这是第二个代码块
16 </script>

图片 2

window.onerror

其它没有通过tyr-catch处理的荒谬都会触发window对象的error事件 如:

 1 <script>
 2     window.onerror= function (msg,url,l)
 3     {
 4         console.log(msg)//Uncaught ReferenceError: a is not defined
 5         console.log(url)//http://localhost:63342/person_Project/js_demo/onerror.html
 6         console.log(l)//17
 7     }
 8 
 9     function run(){
10         console.log(a)
11     }
12     run()
13 </script>

window.onerror 事件接受五个参数:msg  错误音讯、url  发生错误的页面的
url 、line 暴发错误的代码行。

本文拔取TCP完成了Android移动装备和Windows总结机的接连,计算机作为劳务器端监听,移动装备作为客户端,向电脑发出连接请求。

前者代码相当监控方案

有了try catch 捕获的错误对象加上window.onerror
全局监听错误事件,那么前端js代码错误监控变的太简单了。

 

ServerSocket(pt_server,2,ip_server)监听ip_server地址的pt_server端口,当接到客户端的连日请求时,sct_server

ssct_server.accept()接受连接请求,并再次来到一个socket和客户端通讯。

Android端连接线程ConnectThread.java的代码如下:

package com.hzhi.mouse_mb;

import java.net.Socket;

import android.os.Bundle;
import android.os.Message;
import android.widget.Toast;

public class ConnectThread extends Thread{

    public static Socket socket_client;
    public static String ip_server;
    public static int port_server;

    // 消息变量
    private Message msg;
    private Bundle bdl;

    public ConnectThread(String ip, int pt){

        this.ip_server = ip;
        this.port_server = pt;

    }

    public void run(){

        try
        {
            socket_client = new Socket(ip_server, port_server);
            send_message(MainActivity.msg_con_stop, "");            
        }
        catch(Exception e)
        {
             send_message(MainActivity.msg_error, e.getMessage());
        }

    }

    // 发送消息(用于更新UI)
    public void send_message(int x, String s){

        msg = new Message();
        bdl = new Bundle(); 
        bdl.putString("1",s);
        msg.what = x;
        msg.setData(bdl);   
        MainActivity.main_handler.sendMessage(msg);

    }

}

socket_client = new Socket(ip_server,
port_server)向地点为ip_server、端口为port_server的服务器发出连接请求,如延续成功,使用socket_client和服务器的Socket举办通讯。

finally语句

若是存在finally代码块,那么不论什么样原因里面的代码都会实施,甚至是catch
语句中有return语句 如下代码:

    function say() {
        try {
            console.log(age)
            return;
        } catch (erroe) {
            console.log(erroe.message);//age is not defined
            return;
        } finally {
           console.log('finally 执行了');//finally 执行了
        }
    }
    say();

认识Error 类型

当代码运行时暴发错误,会创设一个Error对象,并将其抛出,那些目的涵盖了不当的讲述音讯。

如在 try…catch(error){…} 语句中Error
是Error类型抛出的对象,该目的有多少个着力的性质name 错误名称,message
错误音讯,stack 错误栈新闻;

举办代码期间可能会时有暴发的失实有七种类型,所以Error 又派生了多少个孙子 如:

Error                                  Error
类型的一无所能很少见,即使有也是浏览器抛出的;那些基类型的主要目标是供开发人士抛出自定义错误。
伊娃lError                          
成立一个error实例,表示错误的来由:与 eval() 有关。
InternalError                    
 创立一个意味Javascript引擎内部错误的不行抛出的实例。 如: “递归太多”.
RangeError                      
创设一个error实例,表示错误的因由:数值变量或参数超出其卓有成效限制。
ReferenceError                
创建一个error实例,表示错误的原因:无效引用。
SyntaxError                      
创造一个error实例,表示错误的原由:eval()在条分缕析代码的进程中生出的语法错误。
TypeError                        
创制一个error实例,表示错误的案由:变量或参数不属于有效类型。
URIError            创立一个error实例,表示错误的原由:给
encodeURI()或 decodeURl()传递的参数无效。

Error
是基类,其余错误类型都是几次三番自Error类型,所以子类也就所有了四个焦点的特性name
错误名称,message 错误音讯,stack 错误栈音讯。

有了这个不当类型大家就足以写类似那样的代码,通过判断非凡的品类来特定处理某一类的丰硕如:

 1 <script>
 2     function run() {
 3         try {
 4             say("hello word");
 5         }
 6         catch (error) {
 7             for (var p in error) {
 8                 document.writeln(error[p]);
 9             }
10             //上面可以遍历错误
11             if (error instanceof EvalError) {
12                 //如果非法调用了eval()函数,则会抛出EvalError的异常。
13                 alert("EvalError");
14             } else if (error instanceof ReferenceError) {
15                 //错误的引用,此例子是执行到了本步。
16                 alert("ReferenceError");
17             } else if (error instanceof RangeError) {
18                 //数值超出了范围
19                 alert("RangeError");
20             } else if (error instanceof SyntaxError) {
21                 //语法错误,错误发生在eval(),
22                 alert("SyntaxError");
23             } else if (error instanceof TypeError) {
24                 //变量类型不是预期的
25                 alert("TypeError");
26             } else if (error instanceof URIError) {
27                 //错误发生在encodeURI()或decodeURI()中
28                 alert("URIError");
29             }
30         }
31     }
32     run();
33 </script>

图片 3

 

import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;


public class tListen extends Thread{

    public static ServerSocket ssct_server;
    public static Socket sct_server;
    public static InetAddress ip_server;
    public static Integer pt_server;

    // 线程变量
    public static tReceive t_receive;

    // 本机IP和PORT
    public tListen(InetAddress ip, int port){

        this.ip_server = ip;
        this.pt_server = port;

    }

    public void run(){
        // 开始监听
        try
        {
            fMain.l_status.setText("状态:正在监听客户端......");
            ssct_server = new ServerSocket(pt_server,2,ip_server);
            sct_server = ssct_server.accept();
            fMain.l_status.setText("状态:已经连接上客户端!");
            fMain.set_btn(0, 1);
            // 启动接收线程
            t_receive = new tReceive(sct_server); 
            t_receive.start();
        }
        catch (Exception e0)
        {
            fMain.l_status.setText("错误:" + e0);
            if (ssct_server != null)
                try
                {
                    ssct_server.close();
                }
                catch (Exception e1)
                {
                    fMain.l_status.setText("错误:" + e1);
                }
        }       
    }

}

Javascript的要命处理体制

当执行的javascript代码中冒出谬误的时候,js引擎就会依据js的调用栈逐级寻找对应的catch,要是没有找到呼应的catch
handler或者本身又有error或者又抛出新的error,最后就会把那个error的拍卖交给浏览器,浏览器会用各自不一样的不二法门(IE以风骚三角图案浮现在左下角,而firefix会突显在错误决定布里斯托)展现错误音讯给用户;

本文源代码的下载地址:http://download.csdn.net/detail/k_c_u_f/6673245

fMain是服务端的主界面,tListen是服务端的监听线程,tReceive是服务端的收到线程。

Windows服务端的工程目录如下:

Windows端监听线程tListen.java的代码如下:

MainActivity是客户端的主Activity,ConnectThread是客户端的延续线程,SendThread是客户端的殡葬线程。

Java语言的通讯有Socket(套接字)和HTTP三种方法,其中Socket(套接字)又分为TCP和UDP。TCP是面向连接的、可看重的通讯形式,UDP是无连接的通讯格局。

TCP通讯格局的服务端拔取ServerSocket举行监听,客户端应用Socket发出连接请求。当ServerSocket收到连接请求时,调用accept()方法再次来到一个Socket和客户端的Socket建立连接并通讯。

ssct_server = new

Android客户端的工程目录如下:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图