示例流程圖:
/*****************************
* UDP-service.c
******************************/
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define UDP_PORT 58888
#define UDP_IP "127.0.0.1"
int main(int argc, char **argv)
{
int n;
char recvline[1024] = {0};
char sendline[1024] = {0};
int sockfd;
struct sockaddr_in service_addr;
struct sockaddr_in client_addr;
n = sizeof(struct sockaddr_in);
/* 創建一個UDP連接的socket */
sockfd = socket(PF_INET, SOCK_DGRAM, 0);
/* 變量servaddr清零 */
bzero(&service_addr, sizeof(service_addr));
service_addr.sin_family = AF_INET;
service_addr.sin_addr.s_addr = htonl(UDP_IP); //指定IP
service_addr.sin_port = htons(UDP_PORT);
/* 綁定servaddr到創建的socket上 */
bind(sockfd, (struct sockaddr *)&service_addr, sizeof(service_addr));
/* 接收客戶端發送的數據 */
recvfrom(sockfd, recvline, 1024, 0, (struct sockaddr_in)&client_addr, &n);
printf("[service]: %s\n", recvline);
/* 發送數據 */
sprintf(sendline, "stop request");
sendto(sockfd, sendline, strlen(sendline), 0, (struct sockaddr *)&client_addr, sizeof(servaddr));
/* 關閉socket連接 */
close(sockfd);
return 1;
}
/*****************************
* UDP-client.c
******************************/
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define UDP_PORT 58888
#define UDP_IP "127.0.0.1"
int main(int argc, char **argv)
{
int sockfd;
int n = sizeof(struct sockaddr_in);
char sendline[100] = {0};
struct sockaddr_in servaddr;
if(argc != 2)
{
printf("usgae: ./client [ip]\n");
return -1;
}
/* 創建一個UDP的socket連接 */
sockfd = socket(PF_INET, SOCK_DGRAM, 0);
/* 變量servaddr清零 */
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(UDP_PORT);
servaddr.sin_addr.s_addr = inet_addr(UDP_IP);
char sendline[100];
sprintf(sendline, "Hello, world!");
/* 發送數據 */
sendto(sockfd, sendline, strlen(sendline), 0, (struct sockaddr *)&servaddr, sizeof(servaddr));
/* 接收客戶端發送的數據 */
recvfrom(sockfd, recvline, sizeof(recvline), 0, (struct sockaddr *)&servaddr, &n);
printf("[client]: %s\n",recvline);
/* 關閉socket連接 */
close(sockfd);
return 1;
}