UDP客戶端服務端通訊
阿新 • • 發佈:2022-03-23
服務端 udp_server.c
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <arpa/inet.h> int main(){ //建立用於通訊的socket int fd = socket(PF_INET,SOCK_DGRAM,0); if(fd == -1){ perror("socket"); exit(-1); } struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(9999); addr.sin_addr.s_addr = INADDR_ANY; //繫結 int ret = bind(fd,(struct sockaddr*)&addr,sizeof(addr)); if(ret == -1){ perror("bind"); exit(-1); } //通訊 while(1){ //接受資料 char recvbuf[1024] = {0}; char cIp[128]; struct sockaddr_in caddr; int len = sizeof(caddr); recvfrom(fd,recvbuf,sizeof(recvbuf),0,(struct sockaddr *)&caddr,&len); printf("cliet IP : %s, Port : %d\n", inet_ntop(AF_INET,&caddr.sin_addr.s_addr,cIp,sizeof(cIp)), ntohs(caddr.sin_port)); printf("client say : %s\n",recvbuf); //傳送資料 sendto(fd,recvbuf,sizeof(recvbuf),0,(struct sockaddr *)&caddr,sizeof(caddr)); } close(fd); return 0; }
客戶端 udp_client.c
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <arpa/inet.h> int main(){ //建立用於通訊的socket int fd = socket(PF_INET,SOCK_DGRAM,0); if(fd == -1){ perror("socket"); exit(-1); } struct sockaddr_in saddr; saddr.sin_family = AF_INET; saddr.sin_port = htons(9999); inet_pton(AF_INET,"192.168.245.128",&saddr.sin_addr.s_addr); int i = 0; //通訊 while(1){ //傳送資料 char sendBuf[128]; sprintf(sendBuf,"hello i am client, i = %d\n",i++); sendto(fd,sendBuf,sizeof(sendBuf),0,(struct sockaddr *)&saddr,sizeof(saddr)); //接受資料 recvfrom(fd,sendBuf,sizeof(sendBuf),0,NULL,NULL); printf("server say : %s\n",sendBuf); sleep(1); } close(fd); return 0; }
執行結果