udp

使用UDP协议编写一个网络程序,设置接收端程序的监听端口是8001,发送端发送的数据是“Hello, world”。 
package bzu;

import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetAddress; 
import java.net.SocketException;

public class PersonTest {

public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
    DatagramSocket ds = new DatagramSocket(3000);
    String str = "Hello World";

    DatagramPacket dp = new DatagramPacket(str.getBytes(), str.length(),InetAddress.getByName("localhost"),8001);
    ds.send(dp);
    ds.close();
}


package bzu;

import java.net.DatagramPacket; 
import java.net.DatagramSocket;

public class ServerTest {

public static void main(String[] args)throws Exception {
    // TODO Auto-generated method stub

    byte[] buf = new byte[1024];

    DatagramSocket ds = new DatagramSocket(8001);//定义一个datagramsocket对象,监听的端口8001

    DatagramPacket dp = new DatagramPacket(buf, 1024);//用于接收数据

    System.out.println("等待接受数据");
    ds.receive(dp);
    String str = new String(dp.getData(), 0, dp.getLength())+"from"+dp.getAddress().getHostAddress()+":"+dp.getPort();

    System.out.println(str);
    ds.close();
}



这里写图片描述

UDP(用户数据报协议)是一种无连接的传输层协议,其设计目标是提供一种轻量级、低延迟的数据传输机制。与TCP不同,UDP不提供可靠的数据传输保证,但它以牺牲可靠性来换取更高的传输效率。 ### UDP协议原理 UDP的工作原理基于数据报文的传输方式。发送方将数据封装为独立的数据报文,并通过网络发送到接收方。由于UDP是无连接的,因此在数据传输之前不需要建立连接,也不需要维护连接状态。这种机制使得UDP协议头比TCP简单,仅包含源端口号、目标端口号、数据长度和校验和等字段。 在数据传输过程中,UDP不保证数据报文的顺序、完整性或可靠送达。这意味着数据报文可能会丢失、重复或乱序到达接收方。然而,这种不可靠传输的特点也使得UDP适用于那些对延迟敏感的应用场景。 ### UDP的使用场景 UDP的低延迟特性使其成为实时通信应用的理想选择。例如,在在线游戏中,玩家的动作需要快速传输到服务器和其他玩家,即使偶尔丢失一些数据包也不会对整体体验产生重大影响。同样,在视频会议和流媒体服务中,轻微的数据丢失可以通过其他技术手段进行补偿,而低延迟则是确保用户体验的关键因素之一。 此外,UDP还广泛应用于DNS查询和实时数据传输等领域。在DNS查询中,UDP用于快速获取域名对应的IP地址;而在实时数据传输中,如股票市场数据的广播,UDP能够确保数据尽可能快地到达目的地[^2]。 ### 示例代码 下面是一个简单的Python示例,展示如何使用socket库创建一个UDP客户端和服务器端的基本交互模型: ```python # UDP Server Example import socket def start_udp_server(): # 创建UDP套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定到本地地址和端口 server_address = ('localhost', 10000) sock.bind(server_address) while True: print('\nWaiting to receive message...') data, address = sock.recvfrom(4096) print('Received %d bytes from %s' % (len(data), address)) print(data) if data: sent = sock.sendto(data, address) # 启动UDP服务器 start_udp_server() ``` ```python # UDP Client Example import socket def send_udp_message(): # 创建UDP套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server_address = ('localhost', 10000) message = b'This is the message. It will be echoed.' try: # 发送数据 sent = sock.sendto(message, server_address) # 接收响应 data, server = sock.recvfrom(4096) print('Received:', data) finally: sock.close() # 发送UDP消息 send_udp_message() ``` 这些示例展示了UDP的基本操作,包括绑定地址、接收数据以及发送数据。通过这种方式,可以实现基本的UDP通信。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值