udp--demo

来源:互联网 发布:现在学什么编程 编辑:程序博客网 时间:2024/05/20 02:30

#include<stdio.h>  #include<stdlib.h>  #include<string.h>  #include<sys/types.h>  #include<sys/socket.h>  #include<sys/wait.h>  #include<netinet/in.h>  #include<arpa/inet.h>  #include<errno.h>#include<pthread.h>#define serverBroadPort 9989struct dataOfBroadInit{int broadFd;struct sockaddr_in serviceAddr;};//struct dataOfBroadInit *communData;static struct dataOfBroadInit *initData;static int broadCast(){int recvbytes=0,addrLen=sizeof(struct sockaddr_in);;char msg[128] = "I am broadCast message from client!";char recvbuf[128];if((sendto(initData->broadFd,msg,strlen(msg),0,(struct sockaddr *)&initData->serviceAddr,sizeof(struct sockaddr))) == -1){          printf("sendBroad fail:%s\n",strerror(errno));          return -1;      }  if((recvbytes = recvfrom(initData->broadFd, recvbuf,128,0,(struct sockaddr *)&initData->serviceAddr, &addrLen)) != -1){          recvbuf[recvbytes] = '\0';          printf("receive a messgse:%s\n", recvbuf); printf("receive from:%s:%d\n\n\n\n",inet_ntoa(initData->serviceAddr.sin_addr),ntohs(initData->serviceAddr.sin_port));    }else{              printf("recvfrom fail:%s\n",strerror(errno)); return -1;    }printf("broadcast Over!\n");return 0;}int broadInit(void){//struct dataOfBroadInit *initData=NULL;initData=NULL;int optval=1;initData = malloc(sizeof(struct dataOfBroadInit));if(NULL==initData){printf("malloc err: %s\n",strerror(errno));return -1;}memset(initData,0,sizeof(struct dataOfBroadInit));if((initData->broadFd = socket(PF_INET, SOCK_DGRAM, 0)) == -1){          printf("get socketFd fail\n");  return -1;    }  setsockopt(initData->broadFd, SOL_SOCKET, SO_BROADCAST | SO_REUSEADDR, &optval, sizeof(int));bzero(&initData->serviceAddr,sizeof(struct sockaddr_in));     initData->serviceAddr.sin_family = AF_INET;  printf("cc\n");    initData->serviceAddr.sin_addr.s_addr = inet_addr("255.255.255.255");      initData->serviceAddr.sin_port = htons(serverBroadPort);  if(broadCast() != 0){printf("broadCast err\n");return -1;}return 0;}int nativeSendCmd(const int cmd){if(cmd!=111&&cmd!=112){printf("cmd err\n");return -1;}if((sendto(initData->broadFd,&cmd,sizeof(int),0,(struct sockaddr *)&initData->serviceAddr,sizeof(struct sockaddr))) == -1){          printf("sendMesg fail:%s\n",strerror(errno));          return -1;      }  return 0;}int main(){  //pthread_t pid;//向服务器发送广播/*communData=NULL;communData = broadInit();if(NULL==communData){printf("broadInit err:%s\n",strerror(errno));return -1;}printf("broadcast Over!\n");//已建立连接,开始交流数据//nativeWriteCmd(112);*/broadInit();return 0;}/*************************************************//service_端**************************************************/#include<stdlib.h>  #include<stdio.h>  #include<string.h>  #include<sys/types.h>  #include<netinet/in.h>  #include<netdb.h>  #include<sys/socket.h>  #include<sys/wait.h>  #include<arpa/inet.h> #include<errno.h>#define serverBroadPort 9989int main(void){      int sockListen;  char msg[128] = "I am message from service to u!";    if((sockListen = socket(AF_INET, SOCK_DGRAM, 0)) == -1){          printf("socket fail\n");          return -1;      }      int set = 1;      setsockopt(sockListen, SOL_SOCKET, SO_REUSEADDR, &set, sizeof(int));      struct sockaddr_in recvAddr;      memset(&recvAddr, 0, sizeof(struct sockaddr_in));      recvAddr.sin_family = AF_INET;      recvAddr.sin_port = htons(serverBroadPort);      recvAddr.sin_addr.s_addr = INADDR_ANY;       if(bind(sockListen, (struct sockaddr *)&recvAddr, sizeof(struct sockaddr)) == -1){          printf("bind fail\n");          return -1;      }      int recvbytes;      char recvbuf[128];      int addrLen = sizeof(struct sockaddr_in);      if((recvbytes = recvfrom(sockListen, recvbuf,128,0,(struct sockaddr *)&recvAddr, &addrLen)) != -1){          recvbuf[recvbytes] = '\0';          printf("receive a broadCast messgse:%s\n", recvbuf); printf("receive from:%s:%d\n\n\n\n",inet_ntoa(recvAddr.sin_addr),ntohs(recvAddr.sin_port));    }else{          printf("recvfrom fail\n");      }int sendRet;if((sendRet = sendto(sockListen,msg,strlen(msg),0,(struct sockaddr *)&recvAddr,sizeof(struct sockaddr))) == -1){      printf("sendToClient fail:%s\n",strerror(errno));      return -1; }printf("sucessfully send mesg to Client\n\n");    close(sockListen);      return 0;  }  


0 0
原创粉丝点击