zoukankan      html  css  js  c++  java
  • java socket编程开发简单例子 与 nio非阻塞通道

    基本socket编程

    1、以下只是简单例子,没有用多线程处理,只能一发一收(由于scan.nextLine()线程会进入等待状态),使用时可以根据具体项目功能进行优化处理

    2、以下代码使用了1.8新特性,如果要测试以下代码,java版本不能低于1.8

    3、如果发送的信息需要安全保护,也可以使用安全套接字,SSLSocket例子

    使用socket编程需要注意的两个方法,sendUrgentDatasetOOBInline;sendUrgentData是发送紧急数据用,只可以发送ASCII码,可用于判断远程链接是否断开;setOOBInline设置是否接收紧急数据,默认false丢弃,特别注意的是开启接收紧急数据,在获取数据时,没有区分普通数据与紧急数据方法的支持。

        // 客户端
        public static void main(String[] args) {
            try (Scanner scan = new Scanner(System.in);
                    Socket client = new Socket("127.0.0.1", 8484);
                    PrintWriter writer = new PrintWriter(client.getOutputStream());
                    BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));) {
                while (true) {
                    // writer.print(scan.nextLine() + "
    ");
                    // Writer 的 write(scan.nextLine() + "
    ");方法
                    // 注意:由于服务器端是使用readLine,如果是用上面两种方式写入,必须加换行符,否则readLine是读取不到数据的
                    writer.println(scan.nextLine());
                    writer.flush();
                    while (reader.ready()) {
                        System.out.println(reader.readLine());
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        // 服务端
        public static void main(String[] args) {
            try (Scanner scan = new Scanner(System.in);
                    ServerSocket server = new ServerSocket(8484);
                    Socket sc = server.accept();
                    BufferedReader reader = new BufferedReader(new InputStreamReader(sc.getInputStream()));
                    PrintWriter writer = new PrintWriter(sc.getOutputStream());) {
                while (true) {
                    writer.println(scan.nextLine());
                    writer.flush();
                    while (reader.ready()) {
                        System.out.println(reader.readLine());
                    }
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

     
    nio非阻塞socket通道编程
    这里简单介绍:参考源 http://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html
    1、ServerSocketChannel 相当于封装的ServerSocket
    2、SocketChannel 相当于封装的Socket
    3、通过将ServerSocketChannel 与 SocketChannel 注册到选择器Selector中
    4、选择器中通过selector.select()线程堵塞的方式去获取有事件发生的Channel,类似于server.accept()的堵塞方式
    5、如果有事件发生,通过selector.selectedKeys()获取到所有发生事件的注册信息
    6、通过注册selectedKey获取到实际的通道对象

  • 相关阅读:
    Android+Jquery Mobile学习系列(9)-总结和代码分享
    Android+Jquery Mobile学习系列(8)-保单/生日提醒功能
    Android+Jquery Mobile学习系列(7)-保险人信息
    Android+Jquery Mobile学习系列(6)-个人信息设置
    jquerymobile之collapsible可折叠块标题内容动态显示
    Android+Jquery Mobile学习系列(5)-SQLite数据库
    Android+Jquery Mobile学习系列(4)-页面转场及参数传递
    Android+Jquery Mobile学习系列(3)-创建Android项目
    cmd命令 拷贝某文件夹及其子文件夹文件到其它文件夹
    精简JRE的思路初探
  • 原文地址:https://www.cnblogs.com/rgky/p/5452467.html
Copyright © 2011-2022 走看看