Linux 网络编程作业

编写一个TCP协议网络通信程序,要求在客户端读取文件/etc/passwd的内容,传输到服务器端,服务器端接受并输出在终端上。
客户端:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<netdb.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<errno.h>
#include<sys/wait.h>
#include<unistd.h>
#include<pthread.h>

int main(){
    
    

	int sockfd;
	struct sockaddr_in server_addr;
	server_addr.sin_family=AF_INET;
	server_addr.sin_port=htons(6666);
	server_addr.sin_addr.s_addr=inet_addr("127.0.0.1");

	if ((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
	{
    
    
		perror("socket failure!");
		exit(2);
	}
	if (connect(sockfd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr))==-1)
	{
    
    
		perror("connect failure!");
		exit(3);
	}
	
	char buf[2047];
	FILE *fp=NULL;
	fp=fopen("/etc/passwd","r");
	if(fp==NULL){
    
    
		perror("read file failure!");
		exit(4);	
	}
	while(!feof(fp)){
    
    
		fgets(buf,sizeof(buf),fp);
		if (send(sockfd,buf,strlen(buf),0)==-1)
		{
    
    
			perror("send failure!");
			exit(6);
		}
		sleep(0.1);
	}
	printf("send finish,client quit.\n");
	fclose(fp);
	close(sockfd);
	exit(0);
}

服务器:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<netdb.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<errno.h>
#include<sys/wait.h>
#include<unistd.h>

void pthread_fun(int client_fd){
    
    
	char buf[2047];
	int recvbytes;
	while(1){
    
    
		if ((recvbytes=recv(client_fd,buf,sizeof(buf),0))==-1)
		{
    
    
			perror("recv failure!");
			exit(1);
		}
		if (recvbytes==0)
		{
    
    
			printf("finish!client quit.\n");
			break;
		}
		buf[recvbytes]='\0';
		printf("%s",buf);	
	}
	close(client_fd);
	pthread_exit(0);
}

int main()
{
    
    
	pthread_t id;
	int sockfd,client_fd;
	socklen_t sin_size;
	struct sockaddr_in my_addr;
	struct sockaddr_in remote_addr;
	if ((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
	{
    
    
		perror("socket create failure!");
		exit (3);
	}
	my_addr.sin_family=AF_INET;
	my_addr.sin_port=htons(6666);
	my_addr.sin_addr.s_addr=INADDR_ANY;
	bzero(&(my_addr.sin_zero),8);
	
	if (bind(sockfd,(struct sockaddr *)&my_addr, sizeof(struct sockaddr))==-1)
	{
    
    
		perror("bind failure!");
		exit(4);
	}
	printf("server starts. listening to port 6666\n");
	
	if (listen(sockfd,10)==-1)
	{
    
    
		perror("listen failure!");
		exit(5);
	}
	
	while (1)
	{
    
    
		sin_size=sizeof(struct sockaddr);
		if ((client_fd=accept(sockfd, (struct sockaddr *)&remote_addr, &sin_size))==-1)
		{
    
    
			perror("accept failure!");
			exit(6);
		}
		pthread_create(&id,NULL,(void *)pthread_fun, (void *)client_fd);		
	}
	close(sockfd);
	exit(0);
}

猜你喜欢

转载自blog.csdn.net/DwenKing/article/details/112349881
今日推荐