`
yuancihang
  • 浏览: 145195 次
  • 性别: Icon_minigender_1
  • 来自: 洛阳
社区版块
存档分类
最新评论

Java网络编程四 非阻塞通信UDP

阅读更多

1. 服务端

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.DatagramChannel;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.util.Set;

public class NioUdpServer {

    public static void main(String[] args) {
        try {
            Selector selector = Selector.open();
            DatagramChannel channel = DatagramChannel.open();
            channel.configureBlocking(false);
            DatagramSocket socket = channel.socket();
            socket.bind(new InetSocketAddress(1000));
            channel.register(selector, SelectionKey.OP_READ);
           
            ByteBuffer receiveBuffer = ByteBuffer.allocate(1024);
            final int PACKAGE_SIZE = 10;
            while(true){
                int n = selector.select();
                if(n == 0){
                    continue;
                }
                Set<SelectionKey> readyKeys = selector.selectedKeys();
                for(SelectionKey key : readyKeys){
                    readyKeys.remove(key);
                   
                    if(key.isReadable()){
                        DatagramChannel dc = (DatagramChannel)key.channel();
                        InetSocketAddress client = (InetSocketAddress)dc.receive(receiveBuffer); //接收来自任意一个Client的数据报
                        key.interestOps(SelectionKey.OP_READ);
                       
                        System.out.println("client ----> IP: " + client.getAddress().getHostAddress() + ", port: " + client.getPort());
                        System.out.println("receiveBuffer.position() = " + receiveBuffer.position());
                        if(receiveBuffer.position() >= PACKAGE_SIZE){
                            receiveBuffer.flip();
                            DataInputStream dis = new DataInputStream(new ByteArrayInputStream(receiveBuffer.array()));
                            System.out.println(dis.readInt());
                            BufferedReader d = new BufferedReader(new InputStreamReader(dis));
                            System.out.println(d.readLine());
                           
                            receiveBuffer.clear();
                        }else{
                            dc.register(selector, SelectionKey.OP_READ);
                        }
                    }//if
                }
            }//while
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

2. 客户端可以使用《Java网络编程二 UDP通信》中的客户端连接测试

分享到:
评论

相关推荐

    读书笔记:C#网络编程与JAVA网络通信。TCP, UDP的Socket编程多线程阻塞非阻塞等。.zip

    读书笔记:C#网络编程与JAVA网络通信。TCP, UDP的Socket编程多线程阻塞非阻塞等。

    Java网络编程(第4版)PDF

    此外,Java NIO(New Input/Output)是另一个重要的主题,它是Java 1.4引入的新特性,提供了非阻塞I/O操作,能够显著提升性能。NIO基于通道(Channel)和选择器(Selector),使得程序可以同时处理多个连接,适用于...

    Java网络编程/Java网络编程实例

    4. **NIO(非阻塞I/O)**:Java的NIO库提供了选择器和通道的概念,使得程序可以同时处理多个连接,提高并发性能。Selector用于监听多个Channel,而Channel则连接到网络套接字或其他I/O源。 5. **HTTPClient**:Java...

    java网络编程

    - **NIO(非阻塞I/O)**:Java的NIO库提供了更高效的网络编程模型,适用于高并发场景。 - **异步I/O(AIO)**:Java NIO.2引入了异步I/O,允许非阻塞读写操作。 通过阅读《Java网络编程》第三版,开发者可以系统...

    Java网络编程期末考试复习题库+答案

    在Java中,网络编程主要依赖于Java的Socket编程、ServerSocket、URL类以及NIO(非阻塞I/O)等核心API。这份"Java网络编程期末考试复习题库+答案"为学生提供了全面的复习资源,涵盖了Java网络编程的主要知识点。 1. ...

    java udp socket 网络编程

    Java UDP套接字网络编程是Java编程领域中的一个重要部分,主要涉及如何利用Java的Socket类库来实现基于用户数据报协议(User Datagram Protocol)的通信。UDP是一种无连接的、不可靠的传输协议,适用于对实时性要求...

    Java网络编程第三版.pdf

    1. **Java网络编程基础**:首先,书中会介绍Java中的Socket编程,包括TCP和UDP协议的基础知识,以及如何使用Java的Socket和ServerSocket类创建客户端和服务器端的连接。 2. **I/O与NIO**:Java的I/O流系统是网络...

    《Java网络编程实例:Java网络编程实例》

    Java网络编程是开发分布式应用程序的关键技术,它使得Java程序能够与其他设备、系统和服务进行通信。本书《Java网络编程实例:Java网络编程实例》显然聚焦于通过实际案例来教授这一核心技能。以下是一些主要的知识点...

    Java网络编程实例(随书源代码)

    - **NIO(非阻塞I/O)**:Java的新I/O API提供了选择器(Selector)和通道(Channel),能实现高效的异步I/O操作。 - **HTTP通信**:使用HttpURLConnection或第三方库(如Apache HttpClient)实现HTTP客户端和...

    java网络编程.zip

    05-1-Java非阻塞通信2016版.ppt和05-2-非阻塞HTTP服务器2016版.ppt聚焦于Java的非阻塞I/O(NIO),这是高性能网络编程的重要组成部分。非阻塞I/O允许程序在等待数据时执行其他任务,提高了系统资源的利用率,特别...

    Java网络编程(第四版

    第四版还涵盖了非阻塞I/O(NIO)和选择器,这是高性能网络服务器开发的关键技术。 8. **实战示例**:书中包含了大量的代码示例,帮助读者理解理论知识并将其应用于实际项目。这些示例涵盖从简单的“Hello, World!”...

    java网络编程经典的学习书籍

    此外,Java NIO(New I/O)提供了一种非阻塞的I/O模型,能有效提升网络通信的效率,这部分也是本书的重要内容。 六、网络安全与性能优化 网络编程还涉及到安全问题,如加密通信、身份验证等。书中可能会讨论SSL/TLS...

    java网络编程 PPT

    4. **异步网络编程**:介绍Java NIO(非阻塞I/O)和AIO(异步I/O),这两种技术可以显著提高网络应用的性能,特别是在高并发场景下。 5. **网络协议处理**:讲解HTTP、HTTPS、FTP等常用网络协议,以及如何在Java中...

    Java网络编程技术教案

    Java网络编程是Java开发中的重要领域,它涵盖了通过网络连接进行数据传输和通信的各种技术和方法。本教程将深入探讨如何利用Java进行高效且可靠的网络编程。 一、Java网络编程基础 Java提供了丰富的API来支持网络...

    java网络编程源码

    5. **NIO(非阻塞I/O)**:Java NIO提供了选择器(Selector)、通道(Channel)和缓冲区(Buffer)等机制,可以提高网络编程的效率。源码中可能会有NIO相关的例子,如使用Selector监听多个Socket通道的事件。 6. **...

    java网络编程(中文)

    此外,NIO(非阻塞I/O)在Java网络编程中是一个重要的优化手段。传统的Java I/O基于阻塞模型,而NIO引入了选择器和通道的概念,可以同时处理多个连接,提高了系统的并发性能。`java.nio`包下的`Selector`、`...

    JAVA网络编程大全,pdf版

    《JAVA网络编程大全》是一本全面且深入介绍Java网络编程技术的权威著作,旨在帮助读者掌握Java在构建网络应用程序中的核心概念和实践技巧。PDF版的书籍为学习者提供了便捷的电子阅读体验,随时随地都能深化对Java...

    Java网络编程UDP

    Java网络编程中的UDP(User Datagram ...在实际开发中,如果需要实现更复杂的功能,例如多线程处理多个客户端请求,或者添加身份验证、加密等安全措施,可以结合Java的多线程、NIO(非阻塞I/O)以及网络安全库来实现。

    java网络编程使用tcp、udp实现多用户对话

    Java网络编程是软件开发中的重要领域,特别是在构建分布式系统和实时通信应用时。TCP(传输控制协议)和UDP(用户数据报协议)是网络通信中两种主要的传输层协议,它们各自具有不同的特点和应用场景。在Java中,通过...

    JAVA网络编程(源代码)

    5. **NIO(非阻塞I/O)**:JAVA的New IO API提供了选择器(Selector)和通道(Channel)等机制,使得程序可以同时监控多个输入/输出流,提高了并发性能。 6. **HTTP协议**:JAVA可以通过HttpURLConnection或...

Global site tag (gtag.js) - Google Analytics