tcp模型客戶端服務器代碼實現

 功能: 客戶端輸入小寫字母,服務器顯示相應的大寫字母

./ser 

./cli 127.0.0.1

#include <stdio.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <string.h>
#include <strings.h>

int main(int argc,char *argv[]){
	struct sockaddr_in server;
	//創建socket
	int s_fd=socket(AF_INET,SOCK_STREAM,0);
	if(s_fd==-1){
		perror("socket");
		return 1;
	}
	//初始化server的address
	server.sin_family=AF_INET;
	server.sin_port=htons(7777);
	//127.0.0.1
	inet_pton(AF_INET,argv[1],\
			&server.sin_addr);
	//發起和服務器的連接
	int c=connect(s_fd,\
			(struct sockaddr *)&server,\
			sizeof(server));
	if(c==-1){
		perror("connect");
		return 2;
	}
	char buf[1024];
	//數據處理
	while(gets(buf)!=NULL){
		int r_len=strlen(buf)+1;
		write(s_fd,buf,r_len);
		if(strcmp(buf,"quit")==0) break;
		int r=read(s_fd,buf,r_len);
	//向顯示器輸出從服務器端獲取的信息
		write(1,buf,r);
		printf("\n");
		bzero(buf,1024);
	}
	//關閉和服務器的連接
	close(s_fd);
	return 0;
}
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <ctype.h>
/*internet address family*/
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
int main(void){
	int s_fd;
	char buf[1024];
	//struct sockaddr server;/*通用地址*/
	struct sockaddr_in server;/*ipv4協議族*/
	struct sockaddr_in client;
	//創建socket
	s_fd=socket(AF_INET,SOCK_STREAM,0);
	if(s_fd==-1){
		perror("socket");
		return 1;
	}
	//初始化server的信息
	server.sin_family=AF_INET;
	server.sin_port=htons(7777);
	server.sin_addr.s_addr=htonl(INADDR_ANY);

	//綁定socket到指定的地址空間
	int b=bind(s_fd,\
			(struct sockaddr *)&server,\
			sizeof(server));

	if(b==-1){
		perror("bind");
		return 2;
	}
	//監聽sockfd
	int l=listen(s_fd,5);
	if(l==-1){
		perror("listen");
		return 3;
	}
	printf("wait for client request..\n");
	while(1){
		int cli_len=sizeof(client);
		//阻塞等待客戶端連接的到來
		int connfd=accept(s_fd,\
				(struct sockaddr *)&client,\
				&cli_len);
		if(connfd==-1){
			perror("accept");
			return 4;
		}
		//將客戶端的ip地址的二進制轉化爲字符串格式
			char ip[128];
			printf("ip:%s\n",\
				inet_ntop(AF_INET,&client.sin_addr,ip,128));
		//數據處理
		while(1){
			int r=read(connfd,buf,1024);
			if(strcmp(buf,"quit")==0)break;
		//將buf中的所有字符轉換爲大寫字符
			for(int j=0;j<r;j++)
				buf[j]=toupper(buf[j]);
		//迴應給客戶端
			write(connfd,buf,r);
		//關閉和客戶端的連接
		}
		close(connfd);
	}
	close(s_fd);
	return 0;
}

 

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