C语言-网络编程-UDP通信创建流程

UDP 通信创建流程

UDP 是⼀个传输层的⽆连接的协议,我们编写代码⼀般是分为两个端。⼀个我们称之为发送端,另⼀
个我们称之为接收端。正常⼀般是接收端先运⾏,然后等待结束发送端发送过来的数据。

在这里插入图片描述

创建套接字

首先,我们需要创建套接字,套接字是通信的基础。我们可以通过 socket() 函数来创建套接字。

int socket(int domain, int type, int protocol);
参数:
    @domain
            地址族
            AF_UNIX, AF_LOCAL  本地通信,数据不仅过网卡
            AF_INET         IPV4 ineter⽹通信  
            AF_INET6        IPV6 ineter⽹通信
            AF_PACKET       网卡上的数据包通信
            ....
            
            
    @ type
            使⽤协议类型
                SOCK_STREAM 流式套接字(TCP)
                SOCK_DGRAM 报⽂套接字(UDP)
                SOCK_RAW原始套接字: (IP,ICMP)
                ......
                
    @protocol
            协议编号
            0 : 让系统⾃动识别
            IPPROTO_TCP : TCP协议
            IPPROTO_UDP : UDP协议


返回值:
        成功返回得到的⽂件描述符。当前可使用的最小描述符
        失败返回 -1

发送消息 sendto()

发送端通过 sendto() 函数来发送消息。

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 操作⽅式    0 表示默认操作
        @dest_addr 向指定的地址发送数据
        @addrlen  发送的地址的⼤⼩
        
返回值:

        成功返回实际发送的字节数,失败返回-1



struct sockaddr {
   
    unsigned short sa_family; // 地址族 对应socket()中的domain
    char sa_data[14]; // 地址数据 ip地址端口信息
};
        
struct sockaddr_in {
    
    short int sin_family; // 地址族 AF_INET
    unsigned short int sin_port; // 端口号
    struct in_addr sin_addr;// IP地址
    unsigned char sin_zero[8]; // 填充字节 为了对齐sockaddr
};

struct in_addr {
   
    uint32_t       s_addr; // IP地址
};

示例用法:

//填充信息
struct sockaddr_in peer_addr;
peer_addr.sin_family = AF_INET;
peer_addr.sin_port = htons(8080);
peer_addr.sin_addr.s_addr = inet_addr("192.168.0.88");
//发送信息
n = sendto(sockfd,buf,n,0,(struct sockaddr *)&peer_addr,sizeof(struct sockaddr_in));

示例 发送数据

// todo UDP发送端
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可能只会写BUG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值