`
wangrui
  • 浏览: 189552 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

网络编程之:UDP服务器

阅读更多
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/**
 * UDP服务器
 * 
 */
public abstract class UDPServer implements Runnable {
	// *********常数*********

	private static final int MAX_BUFFER_SIZE = 8096;// 8k
	private static final int DEFAULT_PORT = 9090;

	// *********成员变量*********

	private int bufferSize;
	protected DatagramSocket socket;
	private Thread runner = null;
	private volatile boolean shouldStop = false;

	// *********构造函数*********

	/**
	 * 使用默认监听端口(9090)和默认的接收缓存大小(8096字节)构建一个UDPServer对象。
	 * 
	 */
	protected UDPServer() throws SocketException {
		this(DEFAULT_PORT, MAX_BUFFER_SIZE);
	}

	/**
	 * 
	 * 构建一个UDPServer对象。使用默认的接收缓存大小(8096字节)
	 * 
	 * @param port 服务监听端口
	 * @throws SocketException
	 */
	protected UDPServer(int port) throws SocketException {
		this(port, MAX_BUFFER_SIZE);
	}

	/**
	 * 
	 * 构建一个UDPServer对象。
	 * 
	 * @param port 服务监听端口
	 * @param bufferSize 接收缓存大小(单位字节)
	 * @throws SocketException 端口被占用或没有权限时抛出的例外
	 */
	protected UDPServer(int port, int bufferSize) throws SocketException {
		this.bufferSize = bufferSize;
		this.socket = new DatagramSocket(port);
	}

	// *********成员方法*********

	/**
	 * 开始UDP服务
	 */
	public synchronized void start() {
		if (runner == null) {
			runner = new Thread(this);
			runner.setDaemon(false);
			runner.start();
		}
	}

	/**
	 * 停止UDP服务
	 */
	public synchronized void stop() {
		if (socket != null) {
			shouldStop = true;
			runner.interrupt();
			runner = null;
			socket.close();
			socket = null;
		}
	}

	/**
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Runnable#run()
	 */
	public void run() {
		byte[] buffer = new byte[bufferSize];
		while (!shouldStop) {
			DatagramPacket input = new DatagramPacket(buffer, buffer.length);
			try {
				socket.receive(input);
				requestHandle(input);
			} catch (IOException ioe) {
				// igonre
			}
		}
	}

	/**
	 * 处理UDP请求
	 * 
	 * @param input UDP数据报
	 */
	public abstract void requestHandle(DatagramPacket input);

}



分享到:
评论
1 楼 wxclover 2008-07-16  
[b][/b][i][/i][u][/u]
引用

    [*]

    [*]
[img][/img][url][/url][align=right][/align]    

相关推荐

    Udp编程:服务器和客户端

    下面我们将深入探讨UDP服务器和客户端的编程原理及其关键知识点。 1. UDP协议基础: - UDP协议的特点在于其轻量级,不提供拥塞控制、流控制和重传机制,因此适合实时数据传输,如音频、视频流等对延迟敏感的应用。...

    网络UDP服务器课程设计

    在本课程设计中,我们将深入探讨“网络UDP服务器”的实现,这是一个基于用户数据报协议(UDP)的服务端程序。UDP是一种无连接的传输层协议,它不像TCP那样提供可靠的顺序交付和错误校验,而是以较低的延迟和较高的...

    udp服务器源码

    在“udp服务器源码”中,我们可以预见到这是一个实现UDP通信服务端的程序。下面将详细介绍基于UDP的服务器开发涉及的关键知识点: 1. **UDP协议基础**: UDP是无状态的,每个数据报文独立发送,没有建立连接和维护...

    socket网络(UDP协议编程)

    描述中提到的是两个Win32应用程序,一个是UDP服务器,另一个是UDP客户端。它们在本地机器上通过8888端口进行通信。这意味着我们将了解如何在Windows环境下创建基于UDP的服务器和客户端应用,以及如何配置和使用端口...

    libevent实现UDP relay服务器与客户端

    在libevent中,通过事件驱动的编程模型,我们可以高效地处理多个并发连接,使得UDP relay服务器和客户端能够灵活地应对高流量场景。需要注意的是,由于UDP的特性,服务器和客户端都需要考虑数据包的丢失、乱序和重复...

    UDP.rar_UDP 协议_UDP服务器

    在UDP服务器编程中,主要涉及以下几个关键概念: 1. **端口号**:UDP通信依赖于源和目的端口号来区分不同的服务。每个UDP通信都会有一个特定的源端口号和目的端口号。 2. **Socket接口**:在实现UDP服务器时,...

    网络编程之基于UDP的Socket编程

    在基于 UDP 的 Socket 编程中,程序创建套接字句柄成功以后,可以直接调用函数进行数据的收发,不需要调用任何函数连接服务器或者接受客户端的连接事件的操作。UDP 协议在即时通信中对一些对时间要求较高的网络数据...

    网络编程之TCP UDP流程比较

    网络编程中的TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是两种主要的传输层协议,它们各自有独特的特性和用途。TCP是一种面向连接的协议,它提供了可靠的数据传输服务,确保数据的正确性...

    linux网络编程UDP服务器和客户端代码

    本资料包包含了一个简单的UDP服务器和客户端的示例代码,以及一个公共函数头文件,适用于学习和理解Linux下的UDP网络编程。 首先,我们来看服务器程序。在UDP服务器中,主要任务是创建一个socket,绑定到特定的IP...

    C#各种类型TCP&UDP服务器代码

    4. 同步UDP服务器:使用Socket的ReceiveFrom方法接收数据报,服务器会阻塞直到接收到一个数据报,然后处理并返回响应。 5. TcpListener类:是.NET Framework提供的用于TCP服务器的抽象类,它可以监听指定端口的TCP...

    UDP服务器与客户端

    10. **编程接口**:在编程时,开发者通常会使用操作系统提供的套接字API(如在Unix-like系统上的`socket()`, `bind()`, `sendto()`, `recvfrom()`等函数)来实现UDP服务器和客户端。 通过理解以上知识点,你可以...

    网络编程2UDP编程 网络编程2UDP编程

    UDP(User Datagram Protocol,用户数据报协议)是网络编程中的一个重要概念,它属于传输层协议,与更著名的TCP(Transmission Control Protocol,传输控制协议)并行存在。本篇文章将深入探讨UDP编程的相关知识点,...

    UDP服务器客户端.rar

    8. **网络编程概念**:理解IP地址、端口、数据报等基本概念,对理解UDP服务器客户端的工作原理至关重要。IP地址用来标识网络上的设备,端口用来区分同一设备上运行的不同服务,数据报是UDP的基本传输单元。 9. **...

    UDP服务器设计说明书.docx

    通过这个课程设计,学生不仅能够掌握UDP服务器的实现,还能深入理解网络通信的基础知识,为今后的网络编程工作打下坚实基础。同时,这个项目也能锻炼学生的编程能力、问题解决能力和文档编写能力。

    简单UDP服务器

    简单UDP服务器则是基于UDP协议实现的一个基础服务端程序,用于接收和发送UDP数据包。 在构建一个简单的UDP服务器时,主要涉及以下知识点: 1. **UDP协议特性**: - **无连接**:UDP在发送数据前不需要建立连接,...

    NetWork网络编程TCP和UDP源代码

    在IT领域,网络编程是构建分布式系统和网络应用程序的基础,其中TCP(传输控制协议)和UDP(用户数据报协议)是两种最常用的网络传输层协议。本资源包含"NetWork网络编程TCP和UDP源代码",是学习和实践这两种协议的...

    UDP服务器设计

    UDP服务器设计是一个重要的计算机网络实践任务,主要涉及UDP协议、Java编程、TCP/IP协议栈以及Socket编程技术。UDP,即用户数据报协议,是TCP/IP协议族中的传输层协议之一,其特点是无连接、不可靠,但具有较高的...

    C#编程socket编程之udp服务器端和客户端

    基于Udp协议是无连接模式通讯,占用资源少,响应速度快,延时低。至于可靠性,可通过应用层的控制来满足。(不可靠连接)使用Udp协议通讯需要具备以下几个条件:(1).建立一个套接字(Socket)(2).绑定服务器端IP地址及...

    udp.rar_UDP_UDP服务器_UDP服务器 课程设计_udp 服务器

    在UDP服务器的课程设计中,以下是一些重要的知识点: 1. **UDP协议基础**:理解UDP协议的工作原理,包括其无连接特性,即发送数据前无需建立连接,每个数据包(datagram)都是独立发送的,没有确认机制,一旦发送就...

    UDP_Server.rar_UDP服务器_udp server

    UDP服务器是基于UDP协议实现的网络服务端程序,用于接收和发送UDP数据包。下面我们将深入探讨UDP服务器的工作原理、实现方式以及相关的编程技术。 1. UDP协议特点: - 无连接:在发送数据前,UDP不建立连接,而是...

Global site tag (gtag.js) - Google Analytics