////////////////////////////Demo package com.test.java; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.InetSocketAddress; public class DatagramTestMain { private static final int port = 30006; /** * @param args */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub Thread server = new ServerThread(); server.start(); Thread client = new ClientThread(); client.start(); Thread.sleep(3000); } static class ServerThread extends Thread { @Override public void run() { try { DatagramSocket socket = new DatagramSocket(null);// null is InetSocketAddress address = new InetSocketAddress(port);//server端bind到本地端口 socket.bind(address); //read DatagramPacket rp = new DatagramPacket(new byte[1024], 1024); socket.receive(rp); //right style //byte[] data = Arrays.copyOfRange(rp.getData(),rp.getOffset(), rp.getLength()); System.out.println("server Receive :" + new String(rp.getData())); //reply InetAddress from = rp.getAddress(); rp.setAddress(from); String message = "--server--" + System.currentTimeMillis(); rp.setData(message.getBytes()); socket.send(rp); socket.close(); } catch (Exception e) { e.printStackTrace(); } } } static class ClientThread extends Thread { @Override public void run() { try { //send DatagramSocket socket = new DatagramSocket(); InetSocketAddress address = new InetSocketAddress( InetAddress.getLocalHost(), port); DatagramPacket sp = new DatagramPacket(new byte[1024], 1024); String data = "--client--" + System.currentTimeMillis(); sp.setData(data.getBytes()); sp.setSocketAddress(address); socket.send(sp); //block for receiving. socket.receive(sp); System.out.println("client receive:" + new String(sp.getData())); socket.close(); } catch (Exception e) { e.printStackTrace(); } } } }
/////////////////////////DatagramChannel: public class DatagramChannelTestMain { private static final int port = 30006; /** * @param args */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub Thread server = new ServerThread(); server.start(); Thread client = new ClientThread(); client.start(); Thread.sleep(3000); } static class ServerThread extends Thread { @Override public void run() { try { Selector selector = Selector.open(); InetSocketAddress address = new InetSocketAddress(port); // /socket.setSoTimeout(10000);//10ms DatagramChannel channel = DatagramChannel.open(); channel.configureBlocking(false); channel.socket().bind(address);// null is //channel.register(selector, SelectionKey.OP_READ);//DatagramChannel无需注册selector. ByteBuffer buffer = ByteBuffer.allocate(1024); while (true) { InetSocketAddress from = (InetSocketAddress)channel.receive(buffer); if(from == null){//如果from为null,则表示没有收到数据 Thread.sleep(1000); continue; } buffer.flip(); System.out.println("///////////////////Receive"); System.out.println("data : " + new String(buffer.array())); System.out.println("time : " + System.currentTimeMillis()); System.out.println("from : " + from.getHostName()); buffer.clear(); } } catch (Exception e) { e.printStackTrace(); } } } static class ClientThread extends Thread { @Override public void run() { try { InetSocketAddress address = new InetSocketAddress( InetAddress.getLocalHost(), port); Selector selector = Selector.open(); DatagramChannel channel = DatagramChannel.open(); channel.configureBlocking(false); //channel.socket().connect(address); int count = 0; ByteBuffer buffer = ByteBuffer.allocate(1024); while (count < 100) { String data = "Send Time : " + System.currentTimeMillis(); buffer.put(data.getBytes()); buffer.flip(); channel.send(buffer, address);//通过send指定address System.out.println("///////////////////Send"); System.out.println(data); Thread.sleep(2000); buffer.clear(); count ++; } channel.close(); } catch (Exception e) { e.printStackTrace(); } } } }
相关推荐
本书《Java网络编程实例:Java网络编程实例》显然聚焦于通过实际案例来教授这一核心技能。以下是一些主要的知识点,这些知识点通常会在书中详细讨论: 1. **TCP/IP协议基础**:首先,了解TCP/IP模型和协议栈是非常...
在UDP NIO聊天系统中,服务器端通常会创建一个`DatagramSocket`实例,监听特定的端口,等待来自客户端的数据包。当接收到数据包时,服务器会使用选择器注册这个通道,并进行读操作。同样,客户端也会创建一个`...
- **UDP连接**:DatagramSocket和DatagramPacket类支持无连接的用户数据报协议(UDP),适用于对实时性和效率有要求的应用。 3. **输入输出流**: - **网络I/O**:Java的InputStream和OutputStream类族在处理网络...
2. **DatagramSocket与MulticastSocket**:对于UDP(User Datagram Protocol)通信,Java提供了`DatagramSocket`,它支持无连接的数据报通信。而`MulticastSocket`则允许发送和接收组播数据包,适用于广播或多播场景...
2. **DatagramSocket编程**:对于无连接的UDP通信,Java提供了`java.net.DatagramSocket`和`java.net.DatagramPacket`。UDP是一种面向报文的协议,适合对实时性要求高的场景。 3. **多线程**:在C/S模式下,服务器...
4. **NIO(非阻塞I/O)**:Java的NIO库提供了选择器和通道的概念,使得程序可以同时处理多个连接,提高并发性能。Selector用于监听多个Channel,而Channel则连接到网络套接字或其他I/O源。 5. **HTTPClient**:Java...
8. **NIO(非阻塞I/O)**:Java NIO(New I/O)提供了一种更高效的数据读写方式,通过选择器(Selector)可以监听多个通道(Channel),提高服务器的并发性能。 通过对这些知识点的学习和实践,你可以掌握Java网络...
三、Java网络编程实例 1. 基本的TCP服务器和客户端:ServerSocket监听特定端口,Socket连接到服务器,两者通过输入输出流交换数据。 2. UDP广播和多播:DatagramSocket可以发送广播或多播数据,接收者通过设定特定...
《Java I/O 2nd Edition》这本经典著作,通过丰富的实例和详细的解释,不仅讲解了基本的I/O操作,还深入到高级主题,如NIO和网络通信,是Java开发者的必备参考资料。通过学习这本书,开发者可以更好地掌握Java I/O...
9. **网络IO**:Java的NIO(Non-blocking I/O)和AIO(Asynchronous I/O)为网络编程提供了高效的I/O模型,特别是对于高并发场景,能够显著提升性能。 10. **实战案例**:书中可能包含各种实际的网络应用示例,如...
《Java高手真经:网络开发卷源码》是一份专为Java开发者提供的宝贵资源,它聚焦于Java在网络开发领域的应用,包含丰富的源代码实例。在深入理解Java编程语言的基础上,这份资料将帮助开发者提升在网络编程方面的技能...
Java Socket编程是Java网络编程中的重要组成部分,它允许两台计算机通过网络进行通信。Socket在计算机网络中扮演着客户端和服务器的角色,使得应用程序能够发送和接收数据。本篇内容将深入探讨Java Socket编程的基础...
接着,教程将深入讲解Java的网络类库,如`java.net`包中的`ServerSocket`、`Socket`、`DatagramSocket`等类,以及`java.nio`非阻塞I/O的相关内容。`ServerSocket`用于创建服务器端监听点,`Socket`则用于建立客户端...
- 创建`DatagramSocket`:每个通信方都需要创建一个`DatagramSocket`实例,用于发送和接收数据报。 - 准备`DatagramPacket`:数据以字节数组形式放入`DatagramPacket`,同时指定目标IP地址和端口。 - 发送数据:...
6. **NIO(非阻塞I/O)**:Java NIO提供了更高效的数据传输方式,通过选择器(Selector)和通道(Channel)实现非阻塞的I/O操作。学习如何使用Buffer类进行数据缓冲,以及如何注册和选择事件。 7. **HTTPS安全通信*...
`DatagramSocket`和`DatagramPacket`则用于UDP(用户数据报协议)编程, UDP是无连接的,适合对实时性要求高的场景,但不保证数据的可靠传输。 在网络编程中,异常处理至关重要,因为网络连接可能出现各种不可预知...
4. **UDP协议通讯**:`java.net.DatagramSocket`和`java.net.DatagramPacket`用于实现用户数据报协议(UDP)通信。UDP是一种无连接的、不可靠的传输协议,适合对实时性要求高但对数据完整性要求不高的场景,如视频...
本资源"基于JAVA的UDP服务器模型源代码.zip"提供了一个使用Java实现的用户数据报协议(UDP)服务器模型的实例。UDP是传输层协议,与TCP(传输控制协议)相比,它不保证数据的顺序或可靠性,但具有更低的延迟和更高的...