Linux中的网络编程4

UDP编程

编程思想:

在UDP网络编程中,主要通过UDP套接字(Socket)来实现数据的发送和接收。以下是UDP网络编程的主要步骤:

  1. 创建UDP套接字 :通过调用socket函数创建一个UDP套接字,指定协议类型为UDP。
  2. 绑定端口号 (服务器):对于服务器来说,需要调用bind函数将套接字和指定的端口号进行绑定,以便接收方能够监听该端口。
  3. 发送数据 :使用sendto函数将数据发送给目标地址和目标端口。在发送数据时,UDP会将数据封装成数据报,并附上源端口号和目标端口号等信息。
  4. 接收数据 :使用recvfrom函数从套接字中接收数据。recvfrom函数不仅会接收数据,还会返回发送方的地址信息,这对于无连接协议来说是非常重要的。

所需知识:

bind:绑定服务器:TCP地址和端口号

receivefrom():阻塞等待客户端数据

sendto():指定服务器的IP地址和端口号,要发送的数据

用途:

无连接尽力传输,UDP:是不可靠传输

实时的音视频传输,DNS域名解析包

详细解析:

recvform函数:

recvfrom 函数用于接收UDP数据报。这个函数不仅接收数据,还提供了发送方的地址信息,这对于无连接协议(如UDP)来说是非常重要的,因为接收方需要知道数据是从哪里来的。

函数原型(在C语言中):

头文件:#include <sys/socket.h>

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,

struct sockaddr *src_addr, socklen_t *addrlen);

sockfd:套接字文件描述符。

buf:指向接收数据的缓冲区的指针。

len:缓冲区的大小。

flags:指定接收操作的行为(如MSG_DONTWAIT标志用于非阻塞操作)。没有可用0

src_addr:指向sockaddr结构的指针,该结构在函数返回时包含发送方的地址信息。

addrlen:src_addr缓冲区的大小,且在函数返回时包含实际地址的长度。

sendto函数:

sendto 函数用于发送UDP数据报。与recvfrom类似,这个函数也需要指定目标地址和端口号,因为UDP是无连接的。

函数原型(在C语言中):

#include <sys/socket.h>

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,

const struct sockaddr *dest_addr, socklen_t addrlen);

sockfd:套接字文件描述符。

buf:指向要发送数据的缓冲区的指针。

len:要发送数据的长度。

flags:指定发送操作的行为(如MSG_DONTWAIT标志用于非阻塞操作)。

dest_addr:指向sockaddr结构的指针,该结构包含目标地址信息。

addrlen:dest_addr缓冲区的大小。

实例:

服务器端:

客户端:

成功实现,还可进行多终端交互传输

相关推荐
努力努力再努力wz1 小时前
【Linux进阶系列】:线程(上)
java·linux·运维·服务器·数据结构·c++·redis
java 乐山1 小时前
蓝牙网关(备份)
linux·网络·算法
2301_803554522 小时前
面试后查缺补漏--cmake,makefiles,g++,gcc(自写精华版)
linux·运维·服务器
煤球王子2 小时前
浅学任务调度
linux
102400242 小时前
ubuntu系统中 jupyter Kernel 频繁崩溃原因
linux·运维·服务器
深圳市恒讯科技2 小时前
使用站群服务器做SEO,如何避免被搜索引擎判定为“站群作弊”?
服务器·搜索引擎·php
LilySesy3 小时前
ABAP+如果在join的时候需要表1的字段某几位等于表2的字段的某几位,需要怎么做?
服务器·前端·数据库·sap·abap·alv
大唐荣华3 小时前
工业制造领域的ODM、OEM、EMS、JDM、CM、OBM都是啥
运维·产品运营·制造
z10_143 小时前
海外住宅ip怎么区分干净程度以及怎么选择海外住宅ip
服务器·网络·网络协议·tcp/ip
R-G-B3 小时前
【P7】docker镜像发布和部署
运维·docker·容器·docker镜像·docker镜像发布和部署·镜像发布和部署·docker镜像发布