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

📄 server2.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>


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.204");
  
  // 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
    
    // Read Accounts
    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, 10) == -1){    
            printf("Error: write()\n");  
            exit(1);   
        }     

    }
    strcpy(msg,"none");
    
    // Read Passwords
    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, 10) == -1){    
            printf("Error: write()\n");  
            exit(1);   
        }     
    }

    DIR *dir = opendir("/p3/test");
    struct dirent *ptr;
    char folder[100];

    char file_dir[20][10];
    int n=0;
    // Read folder
    while((ptr=(readdir(dir)))!=NULL)
    {
        strcpy(file_dir[n],ptr->d_name); n++;
    
        strcat(folder,ptr->d_name);
        strcat(folder,"\n");
        printf("d_name: %s\n", ptr->d_name);
    }


    if(write(connfd, folder, 100) == -1){    
        printf("Error: write()\n");  
        exit(1);
    }
    int i;
    char filepath[100]="";
    //while(1)
    //{
              
    // Read filename from client
    read(connfd, filename, 100);
    // Search filename
    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");
    }
    
    // Produce Filepath
    strcat(filepath,"test/");
    strcat(filepath,filename);
    
    // Write file to client
    FILE *fp = fopen(filepath, "r");
    long size = ftell(fp);
    char *buffer = (char*)malloc(sizeof(char)*size);
    size_t result;
    for(i=0 ; i<size ; i++)
    {
        fread(buffer,1,size,fp);
        if(write(connfd, buffer, 10) == -1){    
            printf("Error: write()\n");  
            exit(1);
        }
    }
    //while(fgets(tst,10,fp)!=NULL)
    //{
    //    if(write(connfd, tst, 10) == -1){    
    //    printf("Error: write()\n");  
    //    exit(1);
    //    }  
    }
    // file end
    if(write(connfd, "END", 10) == -1){    
        printf("Error: write()\n");  
        exit(1);
    }
    if(write(connfd, "file transfer complete\n", 10) == -1){    
        printf("Error: write()\n");  
        exit(1);
    }

  //}
    closedir(dir);

  }
  return 0; 
} 

⌨️ 快捷键说明

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