udp--demo

#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 9989


struct 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 9989


int 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;  
}  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章