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

📄 server.c

📁 實現一套網路TCP/IP的嵌入式系統測試程式...希望可以在多平台下運行
💻 C
字号:
#include <stdio.h> 
#include <stdlib.h>
#include <string.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 

#include<sys/types.h>
#include<dirent.h>

char path[100] = "folder_s";

char file_dir[20][10];
char folder[100];

void listFolder()
{
	int n = 0;
	DIR *dir = opendir(path);
    struct dirent *ptr;
    
    strcpy(folder,"");
    while((ptr=(readdir(dir)))!=NULL)
	{
	    printf("d_name: %s\n", ptr->d_name);
        strcpy(file_dir[n],ptr->d_name); n++;
        strcat(folder,ptr->d_name);
        strcat(folder,"\n");
	}
	closedir(dir);
}

int main(){  
    struct sockaddr_in addr_svr; 
    struct sockaddr_in addr_cli; 
  
    int sockfd; 
    int connfd; 

    int sLen = sizeof(addr_cli); 
  
    char id[100];
    char pwd[100];
    char msg[100];
    char tst[50];
    char filename[100];

    // Set Server Address 
    memset(&addr_svr, 0, sizeof(addr_svr));   
    addr_svr.sin_family = AF_INET;  
    addr_svr.sin_port = htons(80);      
    addr_svr.sin_addr.s_addr = inet_addr("192.168.0.155");
  
    // Create Socket 
    sockfd = socket(AF_INET, SOCK_STREAM, 0);  
  
    // Bind Socket 
    if(bind(sockfd, (struct sockaddr *)&addr_svr, sizeof(addr_svr)) == -1){
        printf("Error: bind()\n"); 
        exit(1); 
	} 
  
    // Make Listening Socket 
    if(listen(sockfd, 10) == -1){   
        printf("Error: listen()\n"); 
        exit(1);  
	}  
  
    for(;;){  // Get Connected Socket 
        connfd = accept(sockfd, (struct sockaddr *)&addr_cli, &sLen); 
  
        if(connfd == -1){    
            printf("Error: accept()\n"); 
            exit(1);   
		}

        // Read Data From Client
        while(strcmp(msg,"ok"))
		{    
            if(read(connfd, id, 10) == -1){ 
                printf("Error: read()\n"); 
                exit(1); 
			}
            //printf("%s\n", id);
            if( strcmp(id,"final")==0) strcpy(msg,"ok");
            else strcpy(msg,"false");
    
            if(write(connfd, msg, strlen(msg)+1) == -1){    
                printf("Error: write()\n");  
                exit(1);   
			}     

		}
        strcpy(msg,"none");
        while(strcmp(msg,"ok"))
		{    
            if(read(connfd, pwd, 10) == -1){ 
                printf("Error: read()\n"); 
                exit(1); 
			}
            if(strcmp(pwd,"0916")==0) strcpy(msg,"ok");
            else strcpy(msg,"false");
    
            if(write(connfd, msg, strlen(msg)+1) == -1){    
                printf("Error: write()\n");  
                exit(1);   
			}    
		}

        printf("Here are the files:\n");
  
        //load file from default folder of server
        //DIR *dir = opendir("folder_s/");
        
		//DIR *dir = opendir(path);
        //struct dirent *ptr;
        //char folder[100];
		//char file_dir[20][10];

        char dirs[20][10];
        int n=0;
		int n2=0;
        int i=0;
/*
        while((ptr=(readdir(dir)))!=NULL)
		{
	        printf("d_name: %s\n", ptr->d_name);
	        //printf("d_name: %c\n", ptr->d_type);
	        //if(opendir(ptr->d_name)==NULL)
            strcpy(file_dir[n],ptr->d_name); n++;
            //else
            //{strcpy(dirs[n2],ptr->d_name); n2++;}
    
            strcat(folder,ptr->d_name);
            strcat(folder,"\n");
            //printf("d_name: %s\n", ptr->d_name);
		}
		
*/		
        listFolder();
        if(write(connfd, folder, 100) == -1){     //write detail info of folder....ls
            printf("Error: write()\n");  
            exit(1);
		}



        while(1)
		{

            char filepath[100]="folder_s/";
            if(read(connfd, filename, 100) == -1){ 
                printf("Error: read()\n"); 
                exit(1); 
			}
            if(strcmp(filename,"exit")==0)
			{
				if(write(connfd, "Thank you for use.", 100) == -1){ 
                    printf("Error: write()\n"); 
                    exit(1); 
				}
	            break;      
			}
            //read(connfd, filename, 100);
            printf("%s\n",filename);
            //system("pause"); 
            for(i=0;i<n;i++)
			{
    
                printf("%s\n",file_dir[i]);
                if(strcmp(filename,file_dir[i])==0)
				{
                     printf("file exist\n");
                     break;
				}   
                else
                     printf("file not exist\n");
			}

            strcat(path,"/");
			strcat(path,filename);
			printf("%s\n",path);
			if (opendir(path)==NULL)
			{
                strcat(filepath,filename);
                printf("%s\n",filepath);
                FILE *fp = fopen(filepath, "r");
                while(fgets(tst,10,fp)!=NULL)
				{
                    if(write(connfd, tst, strlen(tst)+1) == -1){    
                        printf("Error: write()\n");  
                        exit(1);
					}
                    printf("%s\n",tst);  
				}

                if(write(connfd, "END", 10) == -1){    
                    printf("Error: write()\n");  
                    exit(1);
				}
                fclose(fp);
                printf("file transfer complete\n");
                strcpy(filepath,"");
			}
			else
			{
				//strcat(path,"/");
				//strcat(path,filename);
				listFolder();

			}

		}
        //closedir(dir);

    }


//fputs(content, fin);
//if(write(connfd,"jyhfjfjgjyfjyfjyfjyfhjkugjuyfjyf", 100) == -1){    
      //printf("Error: write()\n");  
      //exit(1);   
    //} 
 /*   
    if(write(connfd, QueryBuf1, strlen(QueryBuf1)+1) == -1){    
      printf("Error: write()\n");  
      exit(1);   
    }     
         
    if(read(connfd, AnteBuf, 20) == -1){ 
      printf("Error: read()\n"); 
      exit(1); 
    } 
    //Ante = atoi(AnteBuf);
  
    // Write Data Back to Client 
    if(write(connfd, QueryBuf2, strlen(QueryBuf2)+1) == -1){    
      printf( "Error: write()\n");  
      exit(1);   
    }
    
    //Choice = atoi(ChoiceBuf);
    //sprintf(Result, "The winner is NO.%d\nYou lose the game!\n", winnerNO);  
  } 
*/

  return 0; 
} 

⌨️ 快捷键说明

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