计网 - 基于UDP的socket通信

参考

一、Socket技术详解 - 简书 (jianshu.com)

sockaddr和sockaddr_in详解_爱橙子的OK绷的博客-CSDN博客_sockaddr_in

过程

API

1. 创建套接字

int socket(int af, int type, int protocol);

af:  地址族,即IP地址类型

      常用的有AF_INET(IPv4)和AF_INET6(IPv6)

type:  数据传输方式

          常用的有SOCK_STREAM(面向连接、可靠)和 SOCK_DGRAM(无连接)

protocol:  传输协议

                常用的有IPPROTO_TCP(TCP传输协议)和 IPPTOTO_UDP(UDP传输协议)

2. 指定本地地址

int bind(int sock, struct sockaddr* addr, socklen_t addrlen);

服务器端要用bind()函数将套接字与特定的IP地址和端口绑定起来,只有这样,流经该IP地址和端口的数据才能交给套接字处理

sockaddr 和 sockaddr_in

struct sockaddr_in {
    short sin_family;            //地址族
    u_short sin_port;            //16位TCP/UDP端口号
    struct in_addr sin_addr;     //32位IP地址
    char sin_zero[8];            //不使用
};

在网络编程中我们使用sockaddr_in来建立所需的信息,强制类型转换后传入用sockaddr做参数的函数

sock:  socket文件描述符

addr:  sockaddr结构体变量的指针

addrlen:  addr变量的长度,可由sizeof()计算得出

3. 数据的发送

int sendto(int sock, void* buf, size_t nbytes, int flags, struct sockaddr* to, socklen_t addrlen);

sock:  用于传输UDP数据的套接字

buf:  保存待传输数据的缓冲区地址

nbytes:  待传输数据的长度

flags:  一般为0

to:  存有目标地址信息的 sockaddr 结构体变量的地址

addrlen:  to变量的长度

4. 数据的接收

int recvfrom(int sock, void* buf, size_t nbytes, int flags, struct sockadr* from, socklen_t* addrlen);

sock:  用于接收UDP数据的套接字

buf:  保存接收数据的缓冲区地址

nbytes:  可接收的最大字节数(不能超过buf缓冲区的大小)

flags:  一般为0

from:  存有发送端地址信息的 sockaddr 结构体变量的地址

addrlen:  保存from的长度的变量地址值

5. 关闭 

int close(fd);

fd:  要关闭的文件描述符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值