UDP 是无连接通信
通信时需要创建socket
int Socket = socket(AF_INET, SOCK_DGRAM, 0);//TCP时用SOCK_STREAM、UDP时用SOCK_DGRAM
为socket分配地址和端口:地址和端口需要 sockaddr_in 来承载
struct sockaddr_in ser_addr;
memset(&ser_addr, 0, sizeof(ser_addr));
ser_addr.sin_family = AF_INET;
ser_addr.sin_addr.s_addr = htonl(INADDR_ANY); //IP地址,需要进行网络序转换,INADDR_ANY:本地地址
ser_addr.sin_port = htons(port); //端口号
bind(Socket, (struct sockaddr*)&ser_addr, sizeof(ser_addr));//将地址和端口号绑定到Socket
之后使用
recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
参数:
- sockfd: 通信的fd
- buf: 接收数据的一块内存
- len: 接收数据的内存(第二个参数)大小
- flags: 0
- src_addr: 接收谁的数据, 就写入了那个终端的地址信息, 如果不要这部分数据 -> NULL
- addrlen: src_addr参数对应内存大小(传入传出参数)