`
cuisuqiang
  • 浏览: 3962749 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
3feb66c0-2fb6-35ff-968a-5f5ec10ada43
Java研发技术指南
浏览量:3672120
社区版块
存档分类
最新评论

一个简单的UDP服务端和客户端示例

阅读更多

UDP的理论不再多说,我这里直接给出一个关于UDP的HelloWorld程序,代码明了,希望对刚入门的学生有所帮助!

当然,实际上,在这块我也刚入门!

 

首先写服务端代码,服务端邦定本地的IP和端口来监听访问:

package udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

/**
 * UDP服务类
 */
public class UdpServerSocket {
	
	private byte[] buffer = new byte[1024];
	private static DatagramSocket ds = null;
	private DatagramPacket packet = null;
	private InetSocketAddress socketAddress = null;
	
	/**
	 * 测试方法
	 */
	public static void main(String[] args) throws Exception {
		String serverHost = "127.0.0.1";
		int serverPort = 3344;
		UdpServerSocket udpServerSocket = new UdpServerSocket(serverHost,
				serverPort);
		while (true) {
			udpServerSocket.receive();
			udpServerSocket.response("你好,吃了吗!");
		}		
	}

	/**
	 * 构造函数,绑定主机和端口
	 */
	public UdpServerSocket(String host, int port) throws Exception {
		socketAddress = new InetSocketAddress(host, port);
		ds = new DatagramSocket(socketAddress);
		System.out.println("服务端启动!");
	}

	/**
	 * 接收数据包,该方法会造成线程阻塞
	 */
	public final String receive() throws IOException {
		packet = new DatagramPacket(buffer, buffer.length);
		ds.receive(packet);
		String info = new String(packet.getData(), 0, packet.getLength());
		System.out.println("接收信息:" + info);
		return info;
	}

	/**
	 * 将响应包发送给请求端
	 */
	public final void response(String info) throws IOException {
		System.out.println("客户端地址 : " + packet.getAddress().getHostAddress()
				+ ",端口:" + packet.getPort());
		DatagramPacket dp = new DatagramPacket(buffer, buffer.length, packet
				.getAddress(), packet.getPort());
		dp.setData(info.getBytes());
		ds.send(dp);
	}
}

 

运行后提示服务端运行成功,程序开始监听端口,接收方法堵塞,当有访问时才会向下进行!

 

我们写客户端进行访问,看到网上的例子都是直接创建了 DatagramSocket 对象,而其实自己都不知道自己使用的端口是那个,这里我创建时会指定自己邦定的端口,其实很简单,就是初始化该对象时传递一个端口参数。

这里你访问客户端时客户端会打印你的IP和端口!

看一看客户端代码:

package udp;

import java.io.*;
import java.net.*;

/**
 * UDP客户端程序,用于对服务端发送数据,并接收服务端的回应信息
 */
public class UdpClientSocket {
	private byte[] buffer = new byte[1024];

	private static DatagramSocket ds = null;
	
	/**
	 * 测试客户端发包和接收回应信息的方法
	 */
	public static void main(String[] args) throws Exception {
		UdpClientSocket client = new UdpClientSocket();
		String serverHost = "127.0.0.1";
		int serverPort = 3344;
		client.send(serverHost, serverPort, ("你好,亲爱的!").getBytes());
		byte[] bt = client.receive();
		System.out.println("服务端回应数据:" + new String(bt));
		// 关闭连接
		try {
			ds.close();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	/**
	 * 构造函数,创建UDP客户端
	 */
	public UdpClientSocket() throws Exception {
		ds = new DatagramSocket(8899); // 邦定本地端口作为客户端
	}
	
	/**
	 * 向指定的服务端发送数据信息
	 */
	public final void send(final String host, final int port,
			final byte[] bytes) throws IOException {
		DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress.getByName(host), port);
		ds.send(dp);
	}

	/**
	 * 接收从指定的服务端发回的数据
	 */
	public final byte[] receive()
			throws Exception {
		DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
		ds.receive(dp);		
		byte[] data = new byte[dp.getLength()];
		System.arraycopy(dp.getData(), 0, data, 0, dp.getLength());		
		return data;
	}
}

 

 直接运行程序看效果!

 

请您到ITEYE看我的原创:http://cuisuqiang.iteye.com

或支持我的个人博客,地址:http://www.javacui.com

 

1
2
分享到:
评论
4 楼 cuisuqiang 2013-10-18  
cuisuqiang 写道
jiang_xiaohan 写道
客户端怎么设置强求超时啊,

ds.setSoTimeout(5000);即为客户端请求超时5秒

我也是又回头来看这个东西了,没想到,我回复的是一年前的今天有人问的问题,sorry
3 楼 cuisuqiang 2013-10-18  
jiang_xiaohan 写道
客户端怎么设置强求超时啊,

ds.setSoTimeout(5000);即为客户端请求超时5秒
2 楼 jiang_xiaohan 2012-10-18  
客户端怎么设置强求超时啊,
1 楼 cuisuqiang 2012-06-06  
private byte[] buffer = new byte[1024];

这是连接的缓冲区,如果设置太小那对方的数据可能接受的就不是特别完整了!刚开始我还以为是UDP不能接收过大的数据!但是经过同事和网上的资料得知如下:
从UDP的封装格式来看。其中源端口和目的端口各占16位。数据报长度位占16位。
此数据报长度表示的为数据报长度,包含首部和数据区,以字节为单位,最小值为8,即没有数据时的长度。
2^16=65536.所以,UDO最大的数据报长度为65536字节。

希望对同学们有所帮助!

相关推荐

    udp 服务端和客户端,c++

    总之,C++中实现UDP服务端和客户端涉及套接字编程,需要理解如何创建、绑定、发送和接收数据,以及正确地管理套接字生命周期。在实际应用中,还需考虑错误处理、多线程或异步处理,以及可能的数据完整性问题,因为...

    基于UDP协议的简单服务端和客户端示例

    在"基于UDP协议的简单服务端和客户端示例"中,我们通常会看到以下关键概念和技术: 1. **UDP套接字**:在C++中,我们使用`socket()`函数创建UDP套接字,它允许程序收发UDP数据报。套接字分为两种类型:服务器端套接...

    一个UDP服务端和客户端程序,可以用来测试一下硬件通信模组否可用。

    本项目提供了一个UDP服务端和客户端的实现,目的是为了测试硬件通信模组的功能,特别是针对NB-IoT(窄带物联网)终端模组的通信能力。 首先,让我们深入了解一下UDP服务端。UDP服务端负责监听特定的端口,等待来自...

    Qt-UDP服务端与客户端(简单Demo)

    【Qt-UDP服务端与客户端(简单Demo)】 在IT领域,网络通信是软件开发中的重要组成部分,而UDP(User Datagram Protocol,用户...通过实践这个简单的UDP服务端和客户端Demo,你将能更好地理解和掌握Qt中的网络编程。

    Linux UDP服务端和客户端程序的实现

    在示例代码中,我们首先创建了一个UDP服务端Socket,使用`socket(AF_INET, SOCK_DGRAM, 0)`函数创建的。然后,我们使用`bind`函数将服务端Socket绑定到一个指定的IP地址和端口号上,以便客户端可以连接到服务端。 ...

    UDP通讯(服务端及客户端)(C#)

    以下是一个简化的C# UDP服务端和客户端的代码示例: ```csharp // 服务端 using System; using System.Net; using System.Net.Sockets; class UDPServer { static void Main() { UdpClient server = new Udp...

    Mina 服务端客户端示例程序

    在这个"Mina服务端客户端示例程序"中,我们可能找到了一系列用于展示如何使用Mina框架搭建服务端和客户端的代码示例。下面我们将深入探讨Mina的核心概念以及如何通过这些示例进行学习和实践。 1. **非阻塞I/O**:...

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

    在这个"C# UDP客户端和服务端通信"的主题中,我们将探讨如何使用C#来实现基于UDP的简单通信机制。首先,我们需要了解几个核心概念: 1. **UDP套接字**:在C#中,`System.Net.Sockets.UdpClient`类代表一个UDP套接字...

    android_udp服务端与客户端超简单通信实例(附赠得到本地IP的工程代码)

    以下是一个简单的UDP服务端示例: 1. 创建服务端: 服务端需要绑定一个端口并监听该端口上的数据。创建一个`DatagramSocket`,然后通过`DatagramPacket`接收来自客户端的数据。当接收到数据时,可以读取`...

    java的UDP多线程服务端和简单客户端

    Java的UDP(User Datagram Protocol)通信是网络编程中一种常用的方式,它提供了无连接的数据报服务,具有速度快...对于给定的文件"Server",可能是实现上述功能的一个具体示例代码,可以参考其源码进一步了解和学习。

    udp客户端和服务端代码

    在编程中,服务端通常先创建一个socket,绑定到特定的IP地址和端口,然后调用recvfrom函数来接收客户端的数据。接收到数据后,服务端可以执行相应的业务逻辑,最后使用sendto函数将响应发送回客户端。 在提供的文件...

    TCP、UDP客户端服务端例程代码

    本资料提供了TCP和UDP的客户端和服务端的例程代码,这有助于理解这两种协议的工作原理以及如何在实际编程中应用它们。 TCP是一种面向连接的协议,它确保了数据的可靠传输,包括顺序传输、错误检查和流量控制。在TCP...

    linux下的一个socket服务端与客户端的一两个程序

    本示例提供了一个基于UDP(User Datagram Protocol)数据报协议的无连接Socket服务端和客户端的简单程序。UDP是一种无连接的传输层协议,它不保证数据的可靠传输,但具有较高的传输效率。 文件`socket_cli.c`代表...

    Delphi XE10.2 TCPIP服务端及客户端程序

    2. ** Indy (Internet Direct)**:Indy是一个广泛使用的组件库,为Delphi提供了一套完整的网络编程解决方案,包括TCP/IP、UDP、HTTP、FTP等协议的实现。在Delphi XE10.2中,开发者通常会利用Indy来创建服务器和...

    udp通信的服务端和客户端

    下面将详细介绍如何在C#中创建UDP服务端和客户端。 首先,我们来看服务端的实现。服务端的主要任务是监听特定的端口,等待来自客户端的数据包,并对收到的数据进行处理。以下是一个简单的服务端示例: 1. 创建一个...

    基于python的UDP服务端客户端代码

    本主题聚焦于"基于Python的UDP服务端客户端代码",我们将深入探讨UDP协议、Python的socket模块以及如何在Ubuntu系统上运行客户端。 UDP(User Datagram Protocol)是一种无连接的、不可靠的传输层协议,它比TCP...

    第 6 章 基于 UDP 的服务端/客户端

    接下来,`uecho_con_client.c`可能是一个带连接功能的UDP客户端示例。虽然UDP本身是无连接的,但有些实现可能会模拟TCP的连接特性,比如保持连接状态或进行序列化处理,以提高效率或确保数据的完整传输。 `bound_...

    Netty实现Java服务端和C#客户端联通

    C#客户端这边,DotNetty是.NET平台上的一个类似Netty的框架,它允许C#开发者创建基于TCP、UDP、HTTP、WebSocket等协议的服务端和客户端。DotNetty同样提供了异步I/O模型,使得C#应用也能实现高性能的网络通信。 ...

    UDPSocket编程客户端和服务端

    UDP(User Datagram Protocol)是传输层的一个协议,它提供了一种无连接的数据报服务,相比TCP,UDP在传输数据时不需要建立连接,因此具有更低的延迟和更高的效率,但同时也牺牲了数据的可靠性和顺序性。UDP Socket...

    UDP.rar_JAVA UDP服务端_UDP transfer java_UDP客户服务_java udp服务端_计算机网络

    本示例将围绕Java实现的UDP服务端和客户端进行详细解释。 首先,我们有两个关键文件:UDPServer.java和UDPClient.java。这两个文件分别代表了UDP通信中的服务端和客户端。服务端用于接收客户端发送的数据,并可能...

Global site tag (gtag.js) - Google Analytics