2020年9月17日——Java

1.网络编程中,服务器端的accept方法,负责接收客户端发送过来的连接,若没有客户端连接,则一直处于阻塞状态,不会往下运行

2.多线程的搭建步骤:

     (1)搭建服务器

   while ( true ) {

 

    (2)接收客户端的连接,使用accept方法

    (3)分离子线程,为当前客户端提供服务

    (4)关闭与客户端之间的连接

      }

 

3.使用网络编程,搭建服务器时,一般要实现两个线程:

  监听线程和数据处理的线程

  监听线程:负责监听客户端发来的请求,是否将服务器关闭

new Thread(){
    public void run() {
    try {                        
        //调用accept方法,等待被连接,若没有连接时,系统处于阻塞状态
        Socket server = serverSocket.accept();
            //若连接成功,则将flag设置为false,关闭数据处理的线程
        flag = false;
            //关闭监听线程
        server.close();
        System.out.println("服务器已关闭");
    } catch (Exception e) {
        e.printStackTrace();
    }
    }
}.start();

  数据处理的线程:负责处理客户端发送过来的数据【使用多线程】

//1.搭建服务器
ServerSocket ss2 = new ServerSocket(8888);
//flag默认为true,当监听线程将flag设置为false时,结束该线程
while(flag){
    new Thread(){
        public void run() {
            try {
            while (flag) {
            //2.接收客户端连接,接收连接accept(),返回socket对象
            Socket server = serverSocket.accept();
                    
            //3.创建多个子线程,处理不同客户端发送的数据
            new Thread() {
                @Override
            public void run() {
                Collection<Environment> list = null;
                ObjectInputStream ois = null;
                    try {
                    //4.获取客户端传输的流
                    ois = new ObjectInputStream(
                        new BufferedInputStream(
                        server.getInputStream()));
                                
                    //5.获取数据
                    list = (Collection<Environment>)ois.readObject();
                    System.out.println("成功接收客户端发送的数据!");
                                
                    //6.将数据存储入库
                    DBStore db = new DBStoreImpl();
                    db.saveDb(list);
                                
                            } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    //7.关闭资源
                    //关闭流
                    try {
                        if (ois != null) {
                        ois.close();
                    }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                                
                    //关闭与客户端的连接
                    try {
                        server.close();
                    } catch (Exception e) {
                    e.printStackTrace();
                    }
                }
                }
            //启动子线程
            }.start();
                    
            }//while循环结束
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    }.start();  
}                                     

 

4.判断一个集合set1中的元素,是否在另一个集合set2中全都出现时,可使用这种方法:

1 //使用retainAll方法,取两个集合中的交集
2 //若交集中的元素与自身的元素全部一样,则返回false,否则,返回true
3 if ( !set1.retainAll(set2) )

 

posted @ 2020-09-17 22:48  Tinero  阅读(150)  评论(0编辑  收藏  举报