UDP服务器
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
#include <unistd.h>#define N 128
#define PORT 6666
#define IP "192.168.8.25"#define ERR_MSG(msg) do{\fprintf(stderr,"__%d__: ",__LINE__);\perror(msg);\
}while(0)int main(int argc, const char *argv[])
{int sfd = socket(AF_INET,SOCK_DGRAM,0);if(sfd < 0){ERR_MSG("socket");return -1;}struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(PORT);sin.sin_addr.s_addr = inet_addr(IP);if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin)) < 0){ERR_MSG("bind");return -1;}struct sockaddr_in cin;socklen_t addrlen = sizeof(cin);char buf[N] = "";ssize_t res = 0;while(1){bzero(buf,sizeof(buf));res = recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,&addrlen);if(res < 0){ERR_MSG("recvfrom");return -1;}printf("[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buf);strcat(buf, "*_*");if(sendto(sfd, buf, sizeof(buf), 0, (struct sockaddr*)&cin ,sizeof(cin))<0){ERR_MSG("sendto");return -1;}printf("发送成功\n");}close(sfd);return 0;
}
UDP客户端
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
#include <unistd.h>#define N 128
#define PORT 6666
#define IP "192.168.8.25"#define ERR_MSG(msg) do{\fprintf(stderr,"__%d__: ",__LINE__);\perror(msg);\
}while(0)int main(int argc, const char *argv[])
{int sfd = socket(AF_INET,SOCK_DGRAM,0);if(sfd < 0){ERR_MSG("socket");return -1;}struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(PORT);sin.sin_addr.s_addr = inet_addr(IP);char buf[N] = "";ssize_t res = 0;while(1){bzero(buf, sizeof(buf));printf("请输入>>>");fgets(buf, sizeof(buf), stdin);buf[strlen(buf)-1] = 0;if(sendto(sfd, buf, sizeof(buf), 0, (struct sockaddr*)&sin ,sizeof(sin))<0){ERR_MSG("sendto");return -1;}printf("发送成功\n");bzero(buf,sizeof(buf));res = recvfrom(sfd,buf,sizeof(buf),0,NULL,NULL);if(res < 0){ERR_MSG("recvfrom");return -1;}printf("%s\n",buf);}close(sfd);return 0;
}