⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 file_receive.c

📁 s2410 file driver code,it s importtant
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <unistd.h>
#include <fcntl.h>

#define MAX_BUF_SIZE    1024
#define SERVPORT 	6666

struct context
{
	int flag;	/*
					1: file name ,
				   	2: file data  ,
				   	3: file end   ,
				   	other: error
				 */
	int counts;
	char data[MAX_BUF_SIZE];
};

int main( void )
{
	struct sockaddr_in server_sockaddr,client_sockaddr;
	int sin_size,recvbytes,receivepkgs=0;
	int sockfd,client_fd,receivefilefd,writebytes;
	char buf[MAX_BUF_SIZE];
	struct context receivecontext;
	
	if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1)
	{
		perror("socket");
		exit(1);
	}
	printf("socket success!,sockfd=%d\n",sockfd);
	server_sockaddr.sin_family=AF_INET;
	server_sockaddr.sin_port=htons(SERVPORT);
	server_sockaddr.sin_addr.s_addr=INADDR_ANY;
	bzero((char *)&(server_sockaddr.sin_zero),8);
	if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))==-1)
	{
		perror("bind");
		exit(1);
	}
	printf("bind success!\n");
	if(listen(sockfd,10)==-1)
	{
		perror("listen");
		exit(1);
	}
	printf("listening....\n");

	if((client_fd=accept(sockfd,(struct sockaddr *)&client_sockaddr,&sin_size))==-1)
	{
		perror("accept");
		close(sockfd);
		exit(1);
	}
	
	while(1)
	{
		if((recvbytes=recv(client_fd,&receivecontext,sizeof(struct context),0))==-1)
		{
			perror("recv");
			close(sockfd);
			exit(1);
		}
		printf("flag==%d, ",receivecontext.flag);
		switch(receivecontext.flag)
		{
			case 1:
			{
				if((receivefilefd = open(receivecontext.data,O_CREAT|O_RDWR,0666)) < 0)
				{
					perror("open!!!..\n");
					close(sockfd);
					exit(1);
				}
				printf("open file %s,fd: %d......\n", receivecontext.data,receivefilefd );
				break;
			}
				
				
			case 2:
			{
				if((writebytes = write(receivefilefd,receivecontext.data,receivecontext.counts)) < 0)
				{
					perror("write!!!..\n");
					close(sockfd);
					exit(1);
				}
				else
       			   printf("write file fd: %d, packages: %d , %d chars........\n ",receivefilefd,++receivepkgs,writebytes);						
					break;	
			
			}	
				
			case 3:
			{
				if((writebytes = write(receivefilefd,'\0',1)) < 0)
				{
					perror("write!!!..\n");
					exit(1);
				}
       
       			close(receivefilefd);
				close(sockfd);
				
				printf("reveive is end !!!\n");
				return 0;
				break;

			}	
					
				
			default:
			{
				perror("error");
				close(sockfd);
				exit(-1);
				break;
			}	
				

		}
			


	}
	close(sockfd);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -