網絡編程tcp協議源代碼

int tcp_server(void)
{
	int sockfd;
	int new_fd;
	struct sockaddr_in server_addr;
	struct sockaddr_in client_addr;
	char buffer[128];
	int nByte;
	int sin_size;
	
	//1.創建套接字
	if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
	{
		printf("create socket error!\n");
		exit(1);
	}
	
	//2.1設置要綁定的地址
	bzero((char *)&server_addr, sizeof(struct sockaddr_in));
	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(portnum); //字節序(大小端)
	server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
		
	//2.綁定地址
	bind(sockfd,(struct sockaddr*)(&server_addr),sizeof(struct sockaddr));
	
	//3.監聽端口
	listen(sockfd,5);
		
	while(1)
	{
		//4.等待連接
		sin_size = sizeof(struct sockaddr_in);
		new_fd = accept(sockfd,(struct sockaddr*)(&client_addr),&sin_size);//注意:第3個參數爲socklen_t*(整形的指針)
		printf("server get connection from %s\n",inet_ntoa(client_addr.sin_addr)); //將整數型的IP地址轉化爲字符型(192.168.1.1)
		
		//5.接收數據
		nByte = recv(new_fd, buffer, 128, 0);
		buffer[nByte] = '\0';
		printf("server reciivd : %s\n", buffer);
		
		//6.結束連接
		close(new_fd);
	}	
	
	close(sockfd);
	
	return 0;
	
}	

int tcp_client(void)
{
	struct sockaddr_in server_addr;
	char buffer[128];
	
	//1.創建套接字
	int sockfd;
	if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
	{
		printf("create socket error!\n");
		exit(1);
	}
	
	//2.1設置要連接的服務器的地址
	bzero((char *)&server_addr, sizeof(struct sockaddr_in));
	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(portnum);
	server_addr.sin_addr.s_addr = inet_addr("192.168.10.50");
	
	//2.連接服務器
	if(connect(sockfd,(struct sockaddr*)(&server_addr),sizeof(struct sockaddr)) == -1)
	{
		printf("connect error\n");
		exit(1);
	}
	
	//3.發送數據到服務器
	printf("please input char:\n");
	fgets(buffer,128,stdin);
	send(sockfd, buffer, strlen(buffer), 0);
	
	//4.關閉連接
	close(sockfd);
	
	return 0;
	
}

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