无连接的操作使用UDP协议:
一个数据报文是一个独立的单元,其包含了所有的这次投递的信息,目的地址和要发送的内容,快速高效,但是可靠性不佳。
UDP协议下的Socket是一种无连接的Socket。
UDP通讯API
DatagramSocket类:
用于创建接受和发送UDP的Socket实例。
构造器:
DatagramSocket(),特殊用法,常用于客户端编程,没有特定监听的端口。
DatagramSocket(int port),创建实例,并固定监听port端口的报文
DatagramSocket(int port,InerAddress localAddr),当一台机器拥有多个ip地址时,创建只接受来自localAddr的报文。
4个主要方法
void receive(DatagramPacket d):接受数据报文到d中。产生阻塞。
void send(DatagramPacket d):发送报文d到目的地。
void setSoTimeout(int timeout):设置超时时间,单位为毫秒。
void close():关闭DatagramSocket。
DatagramPacket类:
用于处理报文,将字节数组,目标地址,目标端口等数据包装成报文或者将报文拆卸成字节数组。大多数平台能够支持8192字节大小的报文。
构造器:
发送方:
DatagramPacket(byte[] buf,int length,InetAddress addr,int port)
DatagramPacket(byte[] buf,int offset,int length,InetAddress addr,int port)
接收方:
DatagramPacket(byte[] buf,int length)
DatagramPacket(byte[] buf,int offset,int length)
简单的UDP通讯程序如下:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPSend {
/**
* UDP数据发送方,args[0]为目的host.args[1]为端口号,args[2]为数据
* @param args
*/
public static void main(String [] args){
try {
if(args.length<3)
throw new IllegalArgumentException("Wrong number of args");
String host = args[0];
int port = Integer.parseInt(args[1]);
String msg = args[2];
byte [] message;
message = msg.getBytes();
InetAddress addr = InetAddress.getByName(host);//获得host的地址
DatagramSocket dgs = new DatagramSocket();
DatagramPacket dgp = new DatagramPacket(message,message.length,addr,port);
dgs.send(dgp); //发送数据包
dgs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPReceive {
public static void main(String [] args){
try {
if(args.length!=1)
throw new IllegalArgumentException("Wrong number of args");
byte [] buffer = new byte [1024<<1];
DatagramPacket packet = new DatagramPacket(buffer,buffer.length);
DatagramSocket socket = new DatagramSocket(Integer.parseInt(args[0]));
for(;;) {
socket.receive(packet);
String msg = new String(packet.getData());
System.out.println(packet.getAddress().getHostName()+" "+msg);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
分享到:
相关推荐
综上所述,TCP/UDP基础例程涉及了网络编程的核心概念,通过学习和实践这些示例,你可以掌握在网络环境中创建和维护连接、发送和接收数据的基本技能。在Ubuntu这样的Linux系统中,可以利用丰富的命令行工具和强大的...
1.15 第一章+第二章 网络通信基础day2+TCP和UDP基础通信模型day1
本篇文章将详细讲解基于C++的UDP网络通信基础例程,帮助初学者理解如何在VC++环境下使用socket API实现UDP通信。 首先,UDP通信涉及到的主要概念有以下几点: 1. **UDP协议**:UDP是一种无连接的传输层协议,不...
1.16 第二章+第三章 TCP和UDP基础通信模型day2+TCP并发服务器day1
UDP(User Datagram Protocol)是传输层的一个重要协议,与TCP(Transmission Control Protocol)...在处理UDP相关的程序时,如“UDP基础.exe”这样的工具或示例,可以帮助开发者更好地理解UDP的工作原理并进行实践。
TCP连接是TCP通信的基础,它包含了Socket(由IP地址和端口号组成)、序列号(用于解决乱序问题)以及窗口大小(用于流量控制)等关键信息。通过TCP四元组【源地址,源端口,目标地址,目标端口】,可以唯一确定一个...
1. **UDP基础** - UDP协议的特点:无连接、不可靠、面向数据报、支持多播和广播。 - UDP协议的工作原理:发送方将数据封装成数据报,然后直接发往目的地,无需建立连接;接收方接收到数据报后,根据报头信息进行...
一、UDP基础知识 1. UDP协议特点:无连接、不可靠、无拥塞控制,传输速度快。 2. UDP报文结构:包括源端口号、目标端口号、长度和校验和字段。 3. 使用C#的System.Net.Sockets命名空间中的UdpClient类来操作UDP。 ...
1. UDP基础: - UDP协议特性:UDP不提供顺序传输、流量控制、拥塞控制等服务,因此它的开销小,速度快。 - UDP报文结构:包括源端口号、目的端口号、长度和校验和字段,这些字段用于标识和校验数据。 - UDP与TCP...
1. UDP基础: UDP是一种无连接的传输层协议,它不保证数据的顺序、可靠性和重传,因此适用于对实时性要求高的应用,如在线音视频、在线游戏等。与TCP相比,UDP的开销小,但可能会丢失或重复数据包。 2. Android中...
1. **UDP基础知识**: UDP是一种不可靠的协议,它不保证数据包的顺序、不进行错误校验,也不提供重传机制。因此,适用于对实时性要求高但对数据完整性要求相对较低的场景,如音频、视频流媒体等。 2. **MATLAB中的...
1. **UDP基础知识**:理解UDP的工作原理,包括其无连接性、尽最大努力交付的数据传输模式,以及每个数据报独立发送和接收的特点。UDP头部只有8个字节,相比TCP的20个字节,减少了开销。 2. **套接字编程**:在编程...
1. UDP基础 UDP协议在TCP/IP模型的第四层——传输层工作,它不提供顺序传输、错误校验或重传机制,因此适用于对实时性要求高而对数据完整性要求相对较低的应用场景,如在线视频、音频通话和即时通讯等。 2. UDP...
2. **UDP可靠性**:这是我们要解决的问题,即如何在不可靠的UDP基础上实现可靠性。 3. **滑动窗口**:这是实现UDP可靠性传输的关键技术,通过动态调整发送窗口的大小来控制数据发送速率。 4. **网络**:涵盖了整个...
2. **UDP基础知识**: UDP则是一种无连接的、不可靠的传输协议,它的特点是速度快、延迟低,但不保证数据的顺序和完整性。UDP常用于实时应用,如视频流媒体和在线游戏,因为这些应用对速度的需求超过了对数据完整性...
标题"udp.rar_udp 可靠传输_可靠udp"提示我们,这个压缩包包含了一些关于如何在UDP基础上构建可靠传输的资料。这可能包括代码示例、理论解释或实践策略,目的是为了使开发者能够利用UDP实现类似TCP的可靠数据传输...
1. **UDP基础**:理解UDP的基本原理,包括其无连接性、不可靠性和数据报的独立传输。 2. **Java网络编程**:学习如何使用Java的java.net包进行网络编程,包括创建和管理DatagramSocket,以及构建和解析...