文件上传下载(TCP)

/*************************************************************************
 ************************************************************************/
https://www.cnblogs.com/machangwei-8/p/10403533.html
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<unistd.h>
#include <arpa/inet.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <dirent.h>

#define IP "127.0.0.1"
#define SPORT 10086
#define CPORT 10010
#define SIZE  100
int uploadFile(int socket,char * pathname);
int downloadFile(int socket,char * pathname);
int main(int argc,char *argv[])
{
    //定义变量
	int on = 1;
    int ret = 0;
    int socketID = 0;
    int newID = 0;
    int addrLength = sizeof(struct sockaddr_in);
    struct sockaddr_in myAddr;
    struct sockaddr_in addr;
    int addrLength1 = 0;
    char buf[SIZE] = {0};
	DIR *dirptr = NULL;  
	struct dirent *entry = NULL;  

    //打开socket(确定协议)
    socketID = socket(AF_INET,SOCK_STREAM,0);
	setsockopt(socketID, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
    if (socketID < 0 )
    {
        perror("socket error");
        return -1;
    }
    printf("socketID = %d\n",socketID);
    //绑定自己ip&&port
    memset(&myAddr,0,addrLength);
    myAddr.sin_family =AF_INET;
    myAddr.sin_port = htons(SPORT);
    myAddr.sin_addr.s_addr = INADDR_ANY;
    ret = bind(socketID,(struct sockaddr *)&myAddr,addrLength);
    if( ret < 0 )
    {
        perror("bind error");
        return -1;
    }
    //监听
    listen(socketID,8);
    //建立连接
	newID = accept(socketID,(struct sockaddr *)&addr,&addrLength1);
	printf("newID = %d\n",newID);
    //接受信息
	 while(1)
    {
		 
		ret = recv(newID,buf,sizeof(buf),0);
		if(strcmp(buf,"look")==0)
		{ 
			dirptr = opendir("./");
			if(dirptr== NULL)  
			{  
				printf("open dir !");  
				
			}  
			else  
			{  
				while (1)  
				{  
					entry = readdir(dirptr);
					if(NULL == entry)
						break;
					if(strcmp(".",entry->d_name) == 0 || strcmp("..",entry->d_name) == 0)
						continue;
					printf("%s\n",entry->d_name);
					entry->d_name[strlen(entry->d_name)] ='\n';
					send(newID,entry->d_name,strlen(entry->d_name),0);
				}  
				printf("12345678\n");
			}  
		}	
		else if(strcmp(buf,"download")==0)
		{
			printf("qwe\n");
			memset(buf,0,sizeof(buf));
			recv(newID,buf,sizeof(buf),0);
			ret = downloadFile(newID,buf);
			if(ret == 0)
			{
				printf("downloadFile over!\n");
				
				
			}
		}
		else if(strcmp(buf,"upload")==0)
		{
			memset(buf,0,sizeof(buf));
			while(1)
			{
				ret = recv(newID,buf,5,0);
				if(ret == 0)
					break;
			}
			printf("a=%s\n",buf);
			strcpy(buf,"ok!");
			send(newID,buf,strlen(buf),0);
			
			
			ret = uploadFile(newID,buf);
			printf("uploadFile over!\n");
			if(ret == 0)
			{
				printf("uploadFile over!\n");
				
				
			}
		} 
		
	}
	close(newID);
    //关闭socket
    close(socketID);
    return 0;
}
int downloadFile(int socket,char * pathname)
{
	int ret = 0;
	int fd = 0;
	int sum = 0;
	char buf[SIZE] = {0};
	printf("pathname = %s\n",pathname);
	fd = open(pathname,O_RDONLY,0666);
    if(fd < 0)
    {
        perror("open error");
        return -1;
    }
	while(1)
    {
     
        ssize_t ret1 = read(fd,buf,sizeof(buf));
        if(ret1 < 0)
        {
            perror("read error");
            return -1;
        }
        else if(0<ret1)
        {
			ret = send(socket,buf,ret1,0);
			sum =+ ret1;
        }
		
		else
		{
			printf("read over!\n");
			break;
		}
    }
	printf("sum = %d\n",sum);
	close(fd);
	return 0;
}
int uploadFile(int socket,char * pathname)
{
	int ret = 0;
	int fd = 0;
	char buf[SIZE] = {0};
	printf("pathname = %s\n",pathname);
	fd = open(pathname,O_CREAT|O_WRONLY,0666);
    if(fd < 0)
    {
        perror("open error");
        return -1;
    }
	while(1)
    {
        ret = recv(socket,buf,sizeof(buf),0);
		if( ret == 0 )
		{
			break;
		}
		if( ret >0  )
		{
			write(fd,buf,ret);
		}
		
	}
	close(fd);
	return 0;
}

/*************************************************************************
 ************************************************************************/

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

#define IP "127.0.0.1"
#define SPORT 10086
#define CPORT 10010
#define SIZE  100

int myStringToken(char *argv[],char *string);
int uploadFile(int socket,char * pathname);
int downloadFile(int socket,char * pathname);
int main()
{
    //定义变量
    int ret = 0;
    int socketID = 0;
    int addrLength = sizeof(struct sockaddr_in);
    struct sockaddr_in serAddr;
    char buf[SIZE] = {0};
	char commendBuf[100];
	char *comBuf[3];
    //打开socket(确定协议)
    socketID = socket(AF_INET,SOCK_STREAM,0);
    if (socketID < 0 )
    {
        perror("socket error");
        return -1;
    }
    //设置服务器ip&&port
    memset(&serAddr,0,addrLength);
    serAddr.sin_family =AF_INET;
    serAddr.sin_port = htons(SPORT);
    serAddr.sin_addr.s_addr = inet_addr(IP);
    //发送连接请求
    ret = connect(socketID,(struct sockaddr *)&serAddr,addrLength);
    
		if( ret < 0 )
		{
			perror("connet error");
			close(socketID);
			return -1;
		}
    //发送信息
  while(1)
    {
		
		printf("input\n");
		gets(commendBuf);
		ret = myStringToken(comBuf,commendBuf);
		if(ret != 0)
		{
			printf("fail to getcomBuf!\n");
		}
		ret = send(socketID,comBuf[0],strlen(comBuf[0]),0);
		if( ret > 0 )
		{
			printf("send ok\n");
		}
		if(strcmp(comBuf[0],"look")==0)
		{
		
				ret = recv(socketID,buf,sizeof(buf),0);
				if( ret == 0 )
				{
					printf("oklook\n");
					break;
				}
				if( ret >0  )
				{
					printf("%s",buf);
				}
			
			printf("12345678\n");
		}
		
		else if(strcmp(comBuf[0],"upload")==0)
		{
			printf("a=%s\n",comBuf[1]);
			ret = send(socketID,comBuf[1],strlen(comBuf[1]),0);
			if( ret > 0 )
			{
				printf("send ok\n");
			}
			ret = recv(newID,buf,sizeof(buf),0);
			if(strcmp(buf,"ok!")==0)
			{
				ret = uploadFile(socketID,comBuf[1]);
				if(ret = 0)
				{
					printf("uploadFile over!\n");
					
				}	
			}
		}
		else if(strcmp(comBuf[0],"download")==0)
		{
			printf("a=%s\n",comBuf[1]);
			ret = send(socketID,comBuf[1],strlen(comBuf[1]),0);
			if( ret > 0 )
			{
				printf("send ok\n");
			}
			ret = downloadFile(socketID,comBuf[1]);
			if(ret == 0)
			{
				printf("downloadFile over!\n");
				
			}
			
		}
		
    }
    close(socketID);

    return 0;
}
int myStringToken(char *argv[],char *string)
{
	int i=0;
	char delim[]=" ";
	char *p;
	argv[0]=strtok(string,delim);//将用户输入的命令一空格隔开
	while(argv[i]!=NULL)
	{
		argv[++i]=strtok(NULL,delim);//将第二个及其以后的命令分割存入argv中
	}
	return 0;
}
int uploadFile(int socket,char * pathname)
{
	int ret = 0;
	int sum = 0;
	int fd = 0;
	char buf[SIZE] = {0};
	fd = open(pathname,O_RDONLY),0666;
    if(fd < 0)
    {
        perror("open error");
        return -2;
    }
	while(1)
    {
     
        ssize_t ret1 = read(fd,buf,sizeof(buf));
        if(ret1 < 0)
        {
            perror("read error");
            return -1;
        }
        else if(0<ret1)
        {
			ret = send(socket,buf,ret1,0);
			sum =+ ret1;
        }
		
		else
		{
			printf("read over!\n");
			break;
		}
    }
	printf("sum = %d\n",sum);
	close(fd);
	return 0;
}
int downloadFile(int socket,char * pathname)
{
	int ret = 0;
	int fd = 0;
	char buf[SIZE] = {0};
	fd = open(pathname,O_CREAT|O_RDWR,0666);
    if(fd < 0)
    {
        perror("open error");
        return -2;
    }
	while(1)
    {
        ret = recv(socket,buf,sizeof(buf),0);
		if( ret == 0 )
		{
			break;
		}
		if( ret >0  )
		{
			write(fd,buf,ret);
		}
		
	}
	close(fd);
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值