文件传输

该程序在linux下面运行

分别写了服务器端与客户端以下是代码:

server.c

#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <string.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define SA struct sockaddr
#define BUFFER_SIZE 1024
#define LISTEN 5


char * namercve(int fd ,char * name)
{
   int bytes_recv;
   bytes_recv=read(fd,name,sizeof(name));
   if(bytes_recv<=0)
     return NULL;
   name[bytes_recv]='/0';
     return name;
}


int main(int argc,char **argv)
{
    int from_fd,to_fd;
    char buffer[BUFFER_SIZE];
    char name[50];
    int bytes_read,bytes_write;
    char *ptr;
    struct sockaddr_in servaddr,cliaddr;
    int  listenfd;
    socklen_t len;
    /*  if(argc!=3)
    {
     printf("Usage: %s from file to file /n/a",argv[0]);
     exit(1);
    }*/

 

       if((listenfd=socket(AF_INET,SOCK_STREAM,0))<0){
            printf("%s/n",strerror(errno));
            exit(0);
       }
       printf("get socket descriptor success!/n");

       bzero(&servaddr,sizeof(servaddr));
       servaddr.sin_family      = AF_INET;
       servaddr.sin_port        = htons(5566);
       servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

       if(bind(listenfd,(SA *) &servaddr,sizeof(servaddr))==0)
          printf("bind success!/n");

       if(listen(listenfd,LISTEN)==0)
          printf("begin listenning:/n");
 for(;;){
        
          len = sizeof(cliaddr);
           to_fd = accept(listenfd,(SA *) &cliaddr,&len);
           printf("client锛?s/n",inet_ntoa(cliaddr.sin_addr));

    if(!namercve(to_fd,name))
       exit(0);

/*open the source file*/
if((from_fd=open(name,O_RDONLY))==-1)
{
   printf("Open %s Error : %s /n",argv[1],strerror(errno));
   exit(1);
}
/*create dirction file*/
/*if((to_fd=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1)
{
   printf("Open %s Error: %s/n",argv[2],strerror(errno));
   exit(1);
}
*/
/*the following is a classic file-copying code.*/
        
     while(bytes_read=read(from_fd,buffer,BUFFER_SIZE))
{
          /*A critical mistake occures*/
   if((bytes_read==-1)&&(errno!=EINTR)) break;
          /*All bits have been writen down.*/
   else if(bytes_read>0)
   {
    ptr=buffer;
    while(bytes_write=write(to_fd,ptr,bytes_read))
     {
      if((bytes_write==-1)&&(errno!=EINTR)) break;
      else if (bytes_write==bytes_read) break;
      else if(bytes_write>0)
       {
        ptr+=bytes_write;
        bytes_read-=bytes_write;
       }
     }
   if(bytes_write==-1) break;
   }
}
close(from_fd);
close(to_fd);
}
exit(0);  
}

 

 

client.c

#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <string.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define BUFFER_SIZE 1024

int  namesend(int fd,char *name)
{

    int bytes_write;
    bytes_write=write(fd,name,sizeof(name));      
  
    if(bytes_write<=0)
     return 0;
     return 1;
}

int main(int argc,char **argv)
{
   int from_fd,to_fd;
   //int sockfd;
   struct sockaddr_in  servaddr;
   char buffer[BUFFER_SIZE];
   int bytes_read,bytes_write;
   char *ptr;

   if(argc!=3)
    {
      printf("Usage: %s from file to file /n/a",argv[0]);
      exit(1);
    }

 

   if((from_fd=socket(AF_INET,SOCK_STREAM,0))<0)
    {
     perror("socket:");
     exit(errno);
    }


   bzero(&servaddr,sizeof(servaddr));
   servaddr.sin_family  = AF_INET;
   servaddr.sin_port    = htons(atoi("5566"));
  
   if(inet_aton("localhost",&servaddr.sin_addr)<0)
   {
   perror("inet_aton:");
   exit(errno);
   }
  
    
   if(connect(from_fd,(struct sockaddr *) &servaddr,sizeof(servaddr))<0)
   {
   perror("connect:");
   exit(errno);
   }

/*open the source file*/
/*if((from_fd=open(argv[1],O_RDONLY))==-1)
{
   printf("Open %s Error : %s /n",argv[1],strerror(errno));
   exit(1);
}
*/
/*create dirction file*/
 
  if(namesend(from_fd,argv[1])==0)
      exit(0);

 

   if((to_fd=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1)
   {
   printf("Open %s Error: %s/n",argv[2],strerror(errno));
   exit(1);
   }
/*the following is a classic file-copying code.*/
 
   while(bytes_read=read(from_fd,buffer,BUFFER_SIZE))
   {
          /*A critical mistake occures*/
   if((bytes_read==-1)&&(errno!=EINTR)) break;
          /*All bits have been writen down.*/
   else if(bytes_read>0)
   {
    ptr=buffer;
    while(bytes_write=write(to_fd,ptr,bytes_read))
     {
      if((bytes_write==-1)&&(errno!=EINTR)) break;
      else if (bytes_write==bytes_read) break;
      else if(bytes_write>0)
       {
        ptr+=bytes_write;
        bytes_read-=bytes_write;
       }
     }
   if(bytes_write==-1) break;
   }
}
   close(from_fd);
   close(to_fd);
   exit(0);  
}

 

 

以上是源代码。用法下次在说。

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值