您的位置:首页 > 理论基础 > 计算机网络

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));

然后在发送的时候把对方的网络地址设置为广播地址即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息