之前已经介绍过socket编程了,并且实现了一个简单TCP网络程序
https://blog.youkuaiyun.com/qq_34021920/article/details/80153071
现在再来实现一个简单的UDP程序,来看看需要用到的操作
注:UDP同样需要利用socket函数创建套接字,然后利用bind函数进行绑定。在这里就不再做详细介绍(链接戳上面),在这里介绍一下UDP进行数据读写的操作
1.发送数据
#include <sys/types.h>
#include <sys/socket.h>
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
sockfd:是要发送的socket描述符
buf:待发送数据的缓冲区
len:缓冲区长度
flags:调用方式标志位,一般为0, 改变flags,将会改变sendto发送的形式
dest_addr:指向目的套接字的地址
addrlen:所指地址的长度
返回值:成功返回实际传送出去的字符数,失败返回-1。
2.接受数据
#include <sys/types.h>
#include <sys/socket.h>
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
sockfd:标识一个已连接的socket描述符
buf:接受缓冲区
len:接受缓冲区长度
flags:调用操作方式,一般设置为0
src_addr:指向装有源地址的缓冲区
addrlen:缓冲区长度
返回值:成功返回接收到的字符数,失败返回-1。
在之前实现TCP的代码中,我们用到了一些地址转换函数,UDP中同样需要。在这里介绍一下
sockaddr_in中的成员struct in_addr sin_addr表示32位的IP地址,但是我们通常用点分十进制的字符串表示IP地址,所以就需要将字符串转换为in_addr类型,以下函数可就可以实现这个功能:
点分十进制字符串转为32位的网络字节序
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>