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获取到实际的通道对象

  • 相关阅读:
    条件判断和循环
    list 和tuple的使用
    python的五大数据类型
    简单的一个程序,猜字游戏
    redhat7 nfs的配置以及auto自动挂载
    nmcli添加网卡 并且修改设备名字 添加IP地址
    RHEL7 系统ISCSI存储环境搭建
    Java分布式锁
    24个Jvm面试题总结及答案
    最新天猫3轮面试题目:虚拟机+并发锁+Sql防注入+Zookeeper
  • 原文地址:https://www.cnblogs.com/rgky/p/5452467.html
Copyright © 2011-2022 走看看