UNIX环境高级编程-读书笔记-网络编程(三)
2017-06-27 09:30
330 查看
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));
然后在发送的时候把对方的网络地址设置为广播地址即可
采用的是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));
然后在发送的时候把对方的网络地址设置为广播地址即可
相关文章推荐
- UNIX环境高级编程-读书笔记-网络编程(四)
- UNIX环境高级编程-读书笔记-网络编程(一)
- UNIX环境高级编程-读书笔记-网络编程(二)
- UNIX环境高级编程——网络基础概念
- 进程编程3 - UNIX高级环境编程第9章读书笔记
- 读书笔记之UNIX环境高级编程(11)
- UNIX环境高级编程学习之第十六章网络IPC:套接字 - 非阻塞的Socket通信EPoll模型(多路复用), 实用Socket通信模板
- 进程编程2 – Unix环境高级编程8章读书笔记
- 使用pthread库进行多线程编程1 - UNIX环境高级编程第11章读书笔记
- 进程编程3 - UNIX高级环境编程第9章读书笔记
- 《读书笔记》系列1:UNIX环境高级编程
- 进程编程1 – Unix环境高级编程7章读书笔记
- 进程编程1 – Unix环境高级编程7章读书笔记
- 进程编程1 – Unix环境高级编程7章读书笔记
- [UNIX环境高级编程第二版]读书笔记5章
- 读书笔记之UNIX环境高级编程(8)
- UNIX环境高级编程-读书笔记-epoll
- [UNIX环境高级编程第二版]读书笔记1~2章
- unix环境高级编程 读书笔记
- 进程编程2 – Unix环境高级编程8章读书笔记