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

网络编程之:UDP客户端

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

/**
 * UDP客户端
 * 
 */
public class UDPClient {
	// *********常数*********

	private static final int DEFAULT_RECEIVE_BUFFER_SIZE = 8192;
	private static final int DEFAULT_SO_TIMEOUT = 30000;

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

	private SocketAddress serverSocketAddress;
	private byte[] sendData;
	private DatagramPacket output;

	private int receiveBufferSize; // in bytes
	private DatagramSocket ds;

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

	/**
	 * 
	 * 构建一个UDPClient对象。
	 * 
	 * @param serverAddress 服务地址
	 * @param serverPort 服务器监听端口
	 * @throws SocketException
	 */
	public UDPClient(String serverAddress, int serverPort) throws SocketException {
		this(serverAddress, serverPort, new byte[1], DEFAULT_RECEIVE_BUFFER_SIZE, DEFAULT_SO_TIMEOUT);
	}

	/**
	 * 
	 * 构建一个UDPClient对象。
	 * 
	 * @param serverAddress 服务地址
	 * @param serverPort 服务器监听端口
	 * @param sendData 发送的数据
	 * @throws SocketException
	 */
	public UDPClient(String serverAddress, int serverPort, byte[] sendData) throws SocketException {
		this(serverAddress, serverPort, sendData, DEFAULT_RECEIVE_BUFFER_SIZE, DEFAULT_SO_TIMEOUT);
	}

	/**
	 * 
	 * 构建一个UDPClient对象。
	 * 
	 * @param serverAddress 服务地址
	 * @param serverPort 服务器监听端口
	 * @param sendData 发送的数据
	 * @param receiveBufferSize 接收缓存大小
	 * @throws SocketException
	 */
	public UDPClient(String serverAddress, int serverPort, byte[] sendData, int receiveBufferSize)
			throws SocketException {
		this(serverAddress, serverPort, sendData, receiveBufferSize, DEFAULT_SO_TIMEOUT);
	}

	/**
	 * 
	 * 构建一个UDPClient对象。
	 * 
	 * @param serverAddress 服务地址
	 * @param serverPort 服务器监听端口
	 * @param sendData 发送的数据
	 * @param receiveBufferSize 接收缓存大小
	 * @param timeout 超时
	 * @throws SocketException
	 */
	public UDPClient(String serverAddress, int serverPort, byte[] sendData, int receiveBufferSize, int timeout)
			throws SocketException {
		SocketAddress sa = new InetSocketAddress(serverAddress, serverPort);
		this.serverSocketAddress = sa;
		this.sendData = sendData;
		this.output = new DatagramPacket(sendData, sendData.length, sa);

		this.receiveBufferSize = receiveBufferSize;
		this.ds = new DatagramSocket(0);
		this.ds.setSoTimeout(timeout);
	}

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

	/**
	 * 
	 * 构建一个UDPClient对象。
	 * 
	 * @param serverAddress 服务地址
	 * @param serverPort 服务器监听端口
	 * @param sendData 发送的数据
	 * @param receiveBufferSize 接收缓存大小
	 * @param timeout 超时
	 * @throws SocketException
	 */
	public void setServerSocketAddress(SocketAddress serverSocketAddress) {
		this.serverSocketAddress = serverSocketAddress;
	}

	/**
	 * 
	 * 构建一个UDPClient对象。
	 * 
	 * @param serverAddress 服务地址
	 * @param serverPort 服务器监听端口
	 * @param sendData 发送的数据
	 * @param receiveBufferSize 接收缓存大小
	 * @param timeout 超时
	 * @throws SocketException
	 */
	public void setSendData(byte[] sendData) {
		this.sendData = sendData;
	}

	/**
	 * 发送数据并且接受数据。
	 */
	public byte[] sendAndReceive() throws IOException {
		send();
		return receive();
	}

	/**
	 * 只发送数据。
	 */
	public void send() throws IOException {
		output.setSocketAddress(serverSocketAddress);
		output.setData(sendData);
		output.setLength(sendData.length);

		ds.connect(serverSocketAddress);
		ds.send(output);
	}
	
	/**
	 * 接收数据。
	 */
	public byte[] receive() throws IOException {
		byte[] response = null;
		DatagramPacket input = new DatagramPacket(new byte[receiveBufferSize], receiveBufferSize);
		// next line blocks until the response is received
		ds.receive(input);
		int numBytes = input.getLength();
		response = new byte[numBytes];
		System.arraycopy(input.getData(), 0, response, 0, numBytes);

		// may return null
		return response;
	}
	
	/**
	 * 关闭Socket。
	 */
	public void close() {
		this.ds.close();
	}
}


分享到:
评论

相关推荐

    UDP客户端,UDP CLIENT

    6. **错误处理**:在编写UDP客户端时,必须考虑到可能出现的错误情况,如网络中断、目标服务器不可达等。需要使用适当的错误处理机制,如异常处理或返回值检查,以确保程序的健壮性。 7. **多线程/异步处理**:为了...

    UDP客户端_winsocket的UDP客户端_sangdiy_

    UDP客户端在Windows操作系统中通常指的是使用Winsock API(Windows Socket接口)实现的用户数据报协议(User Datagram Protocol)通信程序。Winsock是Windows系统提供的一个应用程序编程接口,它允许程序员直接与TCP...

    简单的UDP客户端+服务端的实现

    1. UDP客户端: - UDP客户端通过`DatagramSocket`类创建一个套接字,用于发送和接收数据报。 - 使用`DatagramPacket`对象封装要发送的数据和目标IP地址与端口号。 - 调用`DatagramSocket.send()`方法发送数据报。...

    Udp编程:服务器和客户端

    4. UDP客户端实现: - 客户端同样需要初始化Winsock。 - 创建套接字,并使用`connect`函数绑定到服务器的IP地址和端口,这不同于TCP的连接,只是设置默认的发送目标。 - 发送数据到服务器,使用`send`函数,因为...

    两个VC网络相关程序:UDP客户端和服务端

    标题中的“两个VC网络相关程序:UDP客户端和服务端”指的是使用Microsoft Visual C++(简称VC++)开发的两个网络通信程序,它们分别基于用户数据报协议(UDP)实现了客户端和服务器的功能。UDP是一种无连接的、不...

    UDP客户端快速创建_UDP客户端快速创建_

    总结起来,创建UDP客户端涉及的关键点有:选择合适的编程语言和库,理解UDP协议的特性,设置socket对象,确定服务器地址,发送和接收数据,以及最后的资源释放。熟练掌握这些步骤,你就能快速创建自己的UDP客户端来...

    UDP 客户端 服务端 网络编程

    2. UDP客户端与服务器端通信流程: - **客户端**:创建套接字(socket),使用bind绑定本地端口号,使用sendto向服务器发送数据报文,指定服务器的IP地址和端口号。 - **服务端**:创建套接字,使用bind绑定本地...

    udp_client.rar_UDP Client_latency_udp client_udp_client_udp客户端

    这表明我们讨论的是一个用于测量网络延迟的UDP客户端程序。UDP客户端通常会发送数据包到远程服务器,然后等待响应,通过计算发送和接收之间的时间差来估算网络延迟。 描述中的"网络延时测试程序客户端,采用UDP协议...

    基于java netty的udp客户端声呐数据对接

    在"基于Java Netty的UDP客户端声呐数据对接"项目中,我们主要关注如何利用Netty处理UDP通信,以及如何解析和封装SCANFISH-II型声呐系统的数据。 UDP(User Datagram Protocol)是一种无连接的传输层协议,它不保证...

    MFC下使用CAsyncSocket类建立UDP客户端与服务器.zip

    CAsyncSocket类是MFC中的一个重要组成部分,它为网络编程提供了低级别的套接字接口,支持TCP和UDP两种传输协议。 首先,我们来看标题中的"UDP客户端与服务器"。UDP(User Datagram Protocol)是一种无连接的传输层...

    UDP服务器客户端编程实战

    在IT行业中,网络编程是不可或缺的一部分,...总之,理解并掌握UDP服务器和客户端的多线程编程是提升网络应用性能的关键,也是IT开发者必备的技能之一。通过实践和不断学习,你可以更好地应对各种复杂的网络编程挑战。

    头歌UDP Ping程序实现-客户端创建UDP套接字

    头歌UDP Ping程序实现-客户端创建UDP套接字头歌UDP Ping程序实现-客户端创建UDP套接字头歌UDP Ping程序实现-客户端创建UDP套接字头歌UDP Ping程序实现-客户端创建UDP套接字头歌UDP Ping程序实现-客户端创建UDP套接...

    [实训解析]Linux之网络编程(UDP)-第2关:UDP数据传送_6841.pdf

    在Linux网络编程中,UDP(User Datagram Protocol)是一种无连接的传输层协议,它提供了简单、快速的服务,但不保证数据包的顺序、可靠性和无重复。本篇实训解析主要关注的是如何使用UDP进行数据的发送与接收。 ...

    C#udp客户端和服务端通信

    在IT行业中,网络通信是软件开发中的重要组成部分,尤其是在分布式系统和实时应用中。C#是一种广泛用于构建桌面、Web...通过这种方式,你可以掌握如何构建自己的UDP客户端和服务端,以及如何处理网络通信中的常见问题。

    Unity UDP服务端和客户端代码

    - 这个脚本用于创建一个UDP客户端,它首先需要初始化一个`UdpClient`对象,用于发送和接收数据报文。 - `Initialize()` 方法通常用于设置目标服务器的IP地址和端口号,并启动监听。 - `SendData()` 方法用于封装...

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

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

    Socket TCP UDP 客户端 服务器模拟工具

    Socket编程是计算机网络编程中的重要组成部分,主要用于实现进程间的通信。在标题和描述中提到的"Socket TCP UDP 客户端 服务器模拟工具",它是一个帮助开发者理解和实践TCP和UDP协议的工具。TCP(Transmission ...

    udp客户端和服务端代码

    在这个“udp客户端和服务端代码”中,我们可以期待看到如何在编程中实现UDP通信的基本过程。 首先,让我们了解一下UDP客户端。UDP客户端的主要任务是向服务器发送数据,并接收服务器的响应。在大多数编程语言中,这...

    UDP客户端程序

    UDP客户端程序是网络通信中的一种基础应用,它利用无连接的用户数据报协议(User Datagram Protocol,简称UDP)与远程服务器进行交互。UDP是一种传输层协议,与更知名的TCP(传输控制协议)相比,它提供了较低级别的...

    udp客户端源代码

    在这个"udp客户端源代码"中,我们可以期待看到如何在编程中实现UDP通信的基本步骤。 1. UDP协议基础 UDP不建立连接,发送数据前不需要像TCP那样建立连接,因此没有握手过程,节省了时间。同时,由于UDP不保证...

Global site tag (gtag.js) - Google Analytics