UDP是在IP上发送数据的另一种协议。不可靠,无法知道数据是否到达,也无法知道数据的不同
部分是否已发送时的数据到达。
UDP为什么有使用之地:在实时音频或视频中丢失或交换数据包只会出现噪声。噪声是可以容忍
的。但是不可容忍停顿,
UDP的实现分为两个类:DatagramPacket(将数据字节填充到数据报的UDP包中)和
DatagramSocket(可以收发UDP数据报)。
与TCP的ServerSocket和Socket不同之处:1.UDP没有两台主机间唯一连接的概念,一个DatagramSocket可以从多个独立主机收发数据。此
处的socket并不专注于一个连接。
2.TCP将网络视为流,通过socket获取输入输出流来收发数据,UDP以数据包形式发送
DatagramPacketUDP数据报基于IP建立的,每台主机有65536个端口号可以使用。数据报中字节数限制为65536-8
个字节(首部要用8个字节)
构造函数:
public DatagramPacket(byte[] buffer,int length)
public DatagramPacket(byte[] buffer,int offset,int length)
如果试图构造一个长度超过buffer的DatagramPacket,将抛出IllegalArgumentException
可以在数据报发送之后并且发送之前修改数据报的data.
getInetAddress():返回一个包含远程主机地址的InetAddress对象。如果数据报是internet接
收的,返回的地址是发送机器的地址。如果是客户端,则返回的是寻址地址。
getPort():返回远程端口
SocketAddress getSocketAddress():返回一个包含远程主机和端口的SocketAddress对象。
byte[] getData():返回一个字节数组,其中包含数据报中的数据
getLength():返回数据报中数据的字节数。它与getData()返回的数组长度不一定相等,
getLength()返回的值可能小于getData()返回的数组长度。
setData(byte[] data):
setData(byte[] data,int offset,int length)
setLength(int length):会改变内部缓冲区中包含实际数据报数据的字节数,而不包含未填充数据的空间。
DatagramSocket:
构造函数:DatagramSocket()
构造函数:DatagramSocket(int port):如果无法创建socket,则抛出SocketException(原因为:指定的端口已被占用或者低于1024的端口没有特权 )
TCP端口和UDP端口没有关联,TCP和UDP可以使用相同的端口号
for(int port=1024;port<=65535;port++)
{
try
{
DatagramSocket server=new DatagramSocket(port);
server.close();
}
catch (SocketException e)
{
System.out.println("There is a server on port:"+port);
}
}
DatagramSocket(int port,InetAddress interface)
DatagramSocket(SocketAddress interface)
void receive(DatagramPacket dp)throws IOException
:与ServerSocket的accept方法类似,此方法会阻塞调用线程,直到数据报到达。如果程序除了等待数据报外还有其他操作,就应当在单独的线程中调用receive()。
void connect(InetAddress host,int port):
connect方法实际上不建立TCP意义上的连接。它确实知名DatagramSocket只对远程主机和指定远程端口发包。试图向另外的主机或端口发包将抛出IllegalArgumentException异常
disconnect():中止已连接DatagramSocket的"连接",这样可以再次收发任何主机和端口的包。
setSoTimeout(int timeout):默认0永不超时
void setReceiveBufferSize(int size)throws SocketException:
建议对来自此socket的输入进行缓冲时使用的字符字节数,但是底层完全可以忽略此建议。
分享到:
相关推荐
1. **UDP Socket编程基础**: Java中的`DatagramSocket`类用于创建UDP套接字,它允许我们发送和接收数据报包。`DatagramPacket`类则封装了数据和目标/源IP地址及端口号,用于构建和解析数据报。 2. **发送数据**:...
Java UDP(用户数据报协议)是网络编程中的一个重要部分,尤其在需要低延迟、无连接通信的场景下。本文将详细讲解如何使用Java来实现一个UDP广播监听器,以接收并处理UDP广播数据。 首先,我们需要理解UDP的基本...
1. **Java UDP基础知识**: - UDP协议:UDP是OSI模型中传输层的一种协议,它不提供数据包的顺序保证、错误校验或重传机制,因此速度较快但稳定性较低。 - DatagramSocket类:Java中用于处理UDP通信的核心类,它...
Java UDP多人聊天室是一个利用Java语言和用户数据报协议(UDP)开发的多用户交互系统。UDP是一种无连接的、不可靠的传输协议,适用于实时通信和对速度要求较高的场景,因为它无需建立连接,直接发送数据包,减少了...
这个简单的实例为我们提供了基础的UDP通信模型,可以帮助开发者理解和实现基于Java的UDP通信系统。通过这两个文件,你可以学习如何在Java中建立和管理UDP套接字,以及如何收发数据包,这对于网络编程和实时多媒体...
1. **Java UDP基础知识**: - UDP是一种无连接的协议,发送数据前无需建立连接,因此具有较低的开销和较高的效率。 - UDP通信基于数据报,每个数据报包含完整的源和目标地址,可以独立发送,可能到达顺序与发送...
了解了以上基础知识后,你可以通过解压并研究`java_UDPServer.rar`和`java_UDPClient.rar`中的代码来深入理解Java UDP编程的实际应用。这些实例将帮助你掌握如何在实际项目中创建UDP服务器和客户端,实现数据的发送...
首先,我们需要了解UDP的基础概念。UDP协议不建立连接,每个数据报文独立发送,没有顺序保证和错误校验,这意味着数据可能会丢失、重复或乱序到达。但是,这正是其速度优势所在,因为没有复杂的连接和确认过程。 在...
通过实际编写和运行UDPServer和UDPClient,可以加深对这些概念的理解,并为开发更复杂的网络应用打下基础。 文件www.pudn.com.txt可能是示例代码的来源或说明文档,通常包含教程、注释或其他相关资源链接,以帮助...
Java提供了一种方式来实现UDP NAT穿透,通过创建一个服务器端和客户端应用程序,可以协助位于NAT后的设备之间建立直接通信。以下是实现这一技术的一些关键知识点: 1. **STUN(Traversal Using Relays around NAT)...
首先,让我们深入理解UDP的基础知识。UDP在传输层(OSI模型的第四层)工作,与TCP(传输控制协议)相对。TCP提供面向连接的服务,确保数据的可靠传输,而UDP则不保证数据包的顺序或完整性,因此它的速度通常更快。 ...
总的来说,这个项目提供了一个基础的UDP聊天系统实现,可以帮助学习者理解如何在Java中利用UDP进行网络通信。它涉及到的主要概念包括:UDP协议的特性,DatagramSocket的使用,以及数据包的发送与接收。此外,对于...
但请注意,这只是一个基础示例,实际的UDP通信可能需要处理更多的异常、数据验证、多线程等问题,以确保服务的稳定性和安全性。此外,如果你需要在不同的主机之间进行通信,你需要替换`DEST_IP`为实际的远程主机IP...
综上所述,"UDP聊天&文件发送.rar"项目涵盖了Java UDP套接字编程的多个方面,包括基础通信、多用户聊天、文件传输和GUI集成,这些都是Java网络编程中的重要概念和技术。通过此项目,开发者可以深入理解如何在实际...
在这个Java实现的UDP简易客户端与服务器端程序中,我们可以通过两个核心文件——UDPClient.java和UDPServer.java来理解其工作原理。 首先,让我们来看看`UDPServer.java`。服务器端通常负责监听特定的端口,接收...
1. **DatagramSocket类**:Java中的`java.net.DatagramSocket`类用于创建UDP套接字,它是UDP通信的基础。程序员可以使用这个类来发送和接收数据报。 2. **DatagramPacket类**:`java.net.DatagramPacket`用于封装要...
Java的Thread类和Runnable接口是进行多线程编程的基础,也可以使用ExecutorService和Future等高级API进行线程池管理。 7. **异常处理**:网络通信过程中,可能会遇到各种异常,如连接失败、数据包丢失等。因此,...
首先,我们要了解UDP的基础知识。UDP不保证数据包的顺序、完整性和可靠性,因此在设计UDP聊天室时,需要开发者自行处理这些方面的问题。例如,可能会出现数据包重复、丢失或乱序的情况,需要通过编程逻辑来解决这些...
首先,我们需要理解UDP的基础知识。UDP是一种无连接的传输层协议,它不保证数据的顺序、完整性和可靠性,但提供了比TCP更低的延迟和更高的效率。因此,当速度是关键因素时,如实时视频流或在线游戏,UDP成为首选。 ...
总的来说,Java UDP实现服务器客户端大小写的转换是一个基础的网络编程示例,它涉及到网络套接字的创建、数据的收发以及基本的字符串操作。通过这个例子,开发者可以更好地理解网络编程的基本概念,为后续更复杂的...