#---------------------------------------------需要的了解一下--------------------------------------------------------------
阿里云产品推广
最高¥2000云产品通用代金券
通过链接购买产品即可获得最高2000元的通用产品代金券。
不管你是学生、希望一个简单云主机试水
你是站长、博主需要购买、搭建个人站点、blog
这里有最直接的优惠:https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=nsw2bzvo
另外有9折折扣码,比直接购买节省的不是一点两点
#---------------------------------------------不需要的就当没看见--------------------------------------------------------
————————————————
版权声明:本文为CSDN博主「小邓在路上」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dqj_forever/article/details/73770460
UDP 通信过程
采用的是c/s的软件架构
客户端
1.socket ----> 2.sendto ------>3.close
详解:
1.socket:创建通信套接字
函数: int socket();
2.sento :向网络中发送消息
函数:ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
sockfd: 通信套接字
buf : 存储消息的buf
len :buf的大小
flags : 0
dest_addr:目标的网络地址
addrlen: 网络地址的长度
返回值: 成功 返回实际发送的字节数 失败返回 -1
说明:ssendto函数就是把消息发送到网络中,但是在这之前一定要预先指定好目标的网络地址,
也就是sendto 函数的dest_addr 参数,包括:
sin_family
sin_port (htons())
sin_addr.s_addr (inet_addr())
3.关闭套接字
服务器端
1.socket ---->2.bind------->3.recvfrom ------>4.close
1.socket:创建网络套接字
函数: int socket();
2.bind :绑定网络地址 (修改套接字里面的网络地址)
函数 : int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
sockfd: 通信套接字
addr: 自己的网络地址
addrlen:网络地址的大小
成功返回 0 失败返回 -1.
说明:这里作为接受端,绑定的是自己的网络地址
包括:
sin_family
sin_port
sin_addr.s_addr
3.recvfrom 接受消息
函数:ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
sockfd: 通信套接字
buf : 消息
len : 消息的长度
flags : 0
src_addr: 接受到的对方的网络地址
addrlen : 网络地址的长度 需要注意的是这里面传参的是地址。
4.close 关闭套接字
函数: close();
说明:
1.UDP通信的基本过程就是,发送端决定好要给谁发送,就直接发送到网络中;
然后接受端从网络中接受网络地址和自己的符合的消息,然后解析。
2.UDP通信不是一种实时的通信,所以一旦发生接受端和发送端的速度不宜样的情况,就会造成丢包的问题。
UDP通信中的广播问题:
在udp的通信的分类中,有一种通信方式,-----广播 通信方式:
就是说,发送放把消息发送出去【广播模式下】,其他的所有的在同一个局域网内的所有的用户都能够接受到这个消息.
详解:
发送端:
1.打开广播功能
2.设置目的主机的网络地址是广播地址
打开广播功能:
函数:int setsockopt(int sockfd, int level, int optname,
const void *optval, socklen_t optlen);
sockfd: 通信套接字
level: SOL_SOCKET
optname: SO_BROADCAST
OPTVAL:
optlen :
设置广播地址:
所有的广播地址都是一样的,那就是主机号都为1 ;
例如:网段 192.168.。。。
广播地址就是:192.168.255
具体的使用方法:
int on = 1;
setsockopt(fd, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on));
然后在发送的时候把对方的网络地址设置为广播地址即可