UDP网络程序设计
1. UDP网络编程模型程序初始化
1.1服务器使用的函数
创建socket----->socket
绑定地址-------->bind
接受数据-------->recvfrom
发送数据-------->sendto
结束连接-------->close
1.2客户机使用函数
创建套接字------>socket
发送数据-------->sento
接受数据-------->recvfrom
结束连接-------->close
二、函数学习
2.1 发送数据sendto
2.1.1包含头文件
#include <sys/types.h>
#include <sys/socket.h>
2.1.2函数原型
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
2.1.3函数参数
sockfd:创建的套接字
*buf:要发送的数据地址
len:数据长度
flags:标识符
dest_addr:目的机地址
addrlen:地址长度
2.1.4返回值
实际发送的数据量
2.2接收数据recvfrom
2.2.1包含头文件
#include <sys/types.h>
#include <sys/socket.h>
2.2.2函数原型
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
2.2.3函数参数
sockfd:创建的套接字
*buf:数据存放的地址
len:数据长度
flags:标识符
dest_addr:数据来源方方的地址
addrlen:地址长度的指针
2.2.4返回值
以字节计数的消息长度,若无可用消息或对方已经按序结束则返回0,若出错则返回-
三. 实例编写
1 #include <stdio.h> 2 #include <string.h> 3 #include <sys/socket.h> 4 #include <netinet/in.h> 7 #define portnum 8888 8 #define msg_size 128 9 int main() 10 { 11 int sockfd; 12 char buffer[msg_size]; 13 struct sockaddr_in server_addr; 14 struct sockaddr_in client_addr; 15 int addrlen; 16 int n; 17 //1.创建套接字 18 sockfd = socket(AF_INET,SOCK_DGRAM,0); 19 20 //2.绑定地址 21 bzero(&server_addr,sizeof(struct sockaddr_in)); 22 server_addr.sin_family = AF_INET; 23 server_addr.sin_port = htons(portnum); 24 server_addr.sin_addr.s_addr = htonl(INADDR_ANY); 25 bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)); 26 27 //3.接受数据 28 while(1) 29 { 30 addrlen = sizeof(struct sockaddr); //获取数据长度地址 31 bzero(buffer,sizeof(buffer)); 32 n = recvfrom(sockfd,buffer,msg_size,0,(struct sockaddr *)(&client_addr),&addrlen); 33 buffer[n] = 0; 34 printf("server received :%s\n",buffer); 35 } 36 //4.结束连接 37 close(sockfd); 38 return 0; 39 }