1.编程模型
2.函数学习
创建socket socket
绑定地址 bind
接收数据 recvfrom
发送数据 sendto
结束连接 close
3.综合实例
/* udp_server.c */
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main()
{
int sockfd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
char buffer[128];
int addrlen;
int n;
//创建socket
sockfd = socket(AF_INET,SOCK_DGRAM,0);
//绑定地址
bzero(&server_addr,sizeof(struct sockaddr_in));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8888);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(sockfd,(struct sockaddr*)(&server_addr),sizeof(struct sockaddr));
//接收数据
while(1)
{
addrlen = sizeof(struct sockaddr);
bzero(buffer,sizeof(buffer));
n = recvfrom(sockfd,buffer,128,0,(struct sockaddr*)(&client_addr),&addrlen);
buffer[n] = '\n';
printf("server received :%s",buffer);
}
//结束连接
close(sockfd);
return 0;
}
/* udp_client.c */
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(int argc,char **argv)
{
int sockfd;
char buffer[128];
struct sockaddr_in server_addr;
if(argc != 2)
{
printf("Usage:%s server_ip\n",argv[0]);
exit(1);
}
//创建套接字
sockfd = socket(AF_INET,SOCK_DGRAM,0);
bzero(&server_addr,sizeof(struct sockaddr_in));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8888);
inet_aton(argv[1],&server_addr.sin_addr);
//发送数据
while(1)
{
printf("please input char:\n");
fgets(buffer,128,stdin);
sendto(sockfd,buffer,strlen(buffer),0,(struct sockaddr*)(&server_addr),sizeof(struct sockaddr));
bzero(buffer,128);
}
//关闭连接
close(sockfd);
return 0;
}