Linux下的udp通讯
整理一个简单的udp通讯模板,方便后续使用在此基础上封装。
udp_server.c:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
int main(int argc, char **argv)
{
int ret;
//创建socket对象
int sockfd = socket(AF_INET,SOCK_DGRAM,0);
if(sockfd < 0)
{
perror("socket failed.\n");
return -1;
}
printf("socket ok!\n");
//创建网络通信对象
struct sockaddr_in svraddr = {0};
svraddr.sin_family =AF_INET;
svraddr.sin_port =htons(8512);
svraddr.sin_addr.s_addr=inet_addr(argv[1]);
//绑定socket对象与通信链接
if(bind(sockfd, (struct sockaddr*)&svraddr, sizeof(svraddr)) < 0)
{
printf("bind failure.\n");
close(sockfd);
return -1;
}
printf("bind success.\n");
struct sockaddr_in cliaddr = {0};
socklen_t len = sizeof(cliaddr);
char recv_buf[100];
char send_buf[100];
while(1)
{
bzero(recv_buf, sizeof(recv_buf));
bzero(send_buf, sizeof(send_buf));
ret = recvfrom(sockfd, &recv_buf, sizeof(recv_buf), 0, (struct sockaddr*)&cliaddr, &len);
if(ret > 0)
{
printf("recv: %s\n",recv_buf);
}
sprintf(send_buf, "Receive the success");
ret = sendto(sockfd, &send_buf, sizeof(send_buf), 0, (struct sockaddr*)&cliaddr, len);
if(ret < 0)
{
perror("send failed\n");
close(sockfd);
return -1;
}
}
close(sockfd);
return 0;
}
udp_client.c:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
int main(int argc, char **argv)
{
int ret;
//创建socket对象
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if(sockfd < 0)
{
perror("socket failed");
return -1;
}
printf("socket ok!\n");
//创建网络通信对象
struct sockaddr_in svraddr;
svraddr.sin_family =AF_INET;
svraddr.sin_port =htons(8512);
svraddr.sin_addr.s_addr = inet_addr(argv[1]);
socklen_t len=sizeof(svraddr);
char send_buf[100];
char recv_buf[100];
while(1)
{
bzero(recv_buf, sizeof(recv_buf));
bzero(send_buf, sizeof(send_buf));
sprintf(send_buf, "Hello,I'm the client");
ret = sendto(sockfd, &send_buf, sizeof(send_buf), 0, (struct sockaddr*)&svraddr, sizeof(svraddr));
if(ret < 0)
{
perror("send failed");
close(sockfd);
return -1;
}
ret = recvfrom(sockfd, &recv_buf, sizeof(recv_buf), 0, (struct sockaddr*)&svraddr, &len);
if(ret > 0)
{
printf("recv_buf: %s\n", recv_buf);
}
sleep(10);
}
close(sockfd);
return 0;
}