UDP 编程

来源:互联网 发布:对编程的认识与看法 编辑:程序博客网 时间:2024/05/21 20:06
/*************************************************************************> File Name: udpserver.c> Author: itdog> Mail: freeitdog@163.com > Created Time: 2013年10月29日 星期二 12时40分23秒 ************************************************************************/#include <stdio.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <stdlib.h>#include <netinet/in.h>#include <arpa/inet.h>#define PORT 1234#define MAXDATASIZE 100main(){int sockfd;struct sockaddr_in server;struct sockaddr_in client;socklen_t len;int num;char buf[MAXDATASIZE];if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1){perror("Creating socket error!");exit(1);}bzero(&server, sizeof(struct sockaddr_in));server.sin_family = AF_INET;server.sin_port = htons(PORT);server.sin_addr.s_addr = htonl(INADDR_ANY);if((bind(sockfd, (struct sockaddr *)&server, sizeof(server))) == -1){perror("Bind() error");exit(1);}len = sizeof(client);while(1){num = recvfrom(sockfd, buf, MAXDATASIZE, 0,(struct sockaddr*)&client, &len);if(num < 0){perror("recvfrom() error");exit(1);}buf[num] = 0;printf("You get a message <%s> from client.\n,Ip is %s and port is %d\n",buf, inet_ntoa(client.sin_addr), htons(client.sin_port));char buf2[1024];sprintf(buf2, "Hello %s.", inet_ntoa(client.sin_addr));sendto(sockfd,buf2,strlen(buf2)+1,0,(struct sockaddr*)&client,sizeof(client));if(!strcmp(buf,"bye")){break;}}close(sockfd);return 0;}



/*************************************************************************> File Name: udpclient.c> Author: ma6174> Mail: ma6174@163.com > Created Time: 2013年10月29日 星期二 12时56分43秒 ************************************************************************/#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#define PORT 1234#define MAXDATASIZE 100int main(int argc, char * argv[]){int sockfd;int num ;char buf[MAXDATASIZE];struct sockaddr_in server, peer;struct hostent * he;if(argc != 3){printf("Usage: %s <Ip Address>\n", argv[0]);exit(1);}if((he = gethostbyname(argv[1])) == NULL){printf("gethostbyname() error");exit(1);}if((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1){printf("socket() error!");exit(1);}bzero(&server, sizeof(server));server.sin_family = AF_INET;server.sin_port = htons(PORT);server.sin_addr.s_addr = inet_addr(he->h_name);sendto(sockfd, argv[2], strlen(argv[2]), 0, (struct sockaddr*)&server,sizeof(server));socklen_t len;len = sizeof(server);while(1){if((num = recvfrom(sockfd, buf, MAXDATASIZE,0,(struct sockaddr*)&peer,&len)) == -1){perror("recvfrom() error");exit(1);}if(len != sizeof(server) || !memcpy(&server,&peer,len) ){printf("recv message from other server\n");continue;}buf[num] = 0;printf("Server message:%s\n", buf);break;}close(sockfd);return 0;}


原创粉丝点击