udpのsocketデータ転送

3153 ワード

SOcketの構成について:
1、sokcetソケットの作成
2、作成したsocketのアドレスとポートをバインドするために、転送のプロトコルを指定し、一般的にAF_を採用するINET、データの伝送フォーマットは一般的に(SOCK_STREAM、SOCK_DGRAM)
3、ファイル識別子を開き、データの送信を開始する
udpクライアントCODE:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
	
void client(int sock){
	//2、     socket  
	struct sockaddr_in servaddr;
	memset(&servaddr, 0, sizeof(servaddr));
	//3、      、        
	servaddr.sin_family = AF_INET;
	servaddr.sin_port = htons(5188);
	servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");

	//4、             
	int ret;
	char sendbuf[1024] = {0};
	char recvbuf[1024] = {0};
	//5、      (              )
	while(fgets(sendbuf, sizeof(sendbuf), stdin) != NULL){
		sendto(sock, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&servaddr, sizeof(servaddr));
		//6、      ,          
		ret = recvfrom(sock, recvbuf, sizeof(recvbuf), 0, NULL, NULL);
		if(ret == -1){
			perror("recvfrom");
			exit(EXIT_FAILURE);
		}

		//fputs(recvbuf, stdout);		//                
		
		//7、         
		memset(sendbuf, 0, sizeof(sendbuf));
		memset(recvbuf, 0, sizeof(recvbuf));
	}
	//8、  socket 
	close(sock);
}

int main(void){
	int sock;
	//1.      socket
	if((sock = socket(PF_INET, SOCK_DGRAM, 0)) < 0){
		perror("socket");
		exit(EXIT_FAILURE);
	}
	client(sock);
	return 0;
}
 
   
   
  UDP   CODE: 
   
  
 
  
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

void server(int sock){
	//1、          
	char recvbuf[1024] = {0};
	//2、  socket
	struct sockaddr_in peeraddr;
	socklen_t peerlen;
	int n;
	while(1){
		//
		peerlen = sizeof(peeraddr);
		//3、        
		memset(recvbuf, 0, sizeof(recvbuf));
		//4、      
		n = recvfrom(sock, recvbuf, sizeof(recvbuf), 0, (struct sockaddr *)&peeraddr, &peerlen);
		//5、          
		if(n == -1){
				perror("recvfrom"); 
				exit(EXIT_FAILURE); 
		}else if(n > 0){
			//6、      ,            ,      
			fputs(recvbuf, stdout);
			//7、            (          )
			sendto(sock, recvbuf, n, 0, (struct sockaddr *)&peeraddr, peerlen);
		}
	}
	//  socket
	close(sock);
}

int main(void){
		int sock;
		//     socket
		if((sock = socket(PF_INET, SOCK_DGRAM, 0)) < 0){
			perror("socket error");
			exit(EXIT_FAILURE);
		}
		//     socket  
		struct sockaddr_in servaddr;
		memset(&servaddr, 0, sizeof(servaddr));
		//  socket   、      
		servaddr.sin_family = AF_INET;
		servaddr.sin_port = htons(5188);
		servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
	
		// socket    
		if(bind(sock, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0){
			perror("bind error");
			exit(EXIT_FAILURE);
		}
		server(sock);
		return 0;
}