嵌入式客户端向服务器端上传文件

2025-10-10 05:09:54

1、客户端的代码:(先运行服务器端 ,并且新建一个1.txt文件:Hello world!)

#include<stdio.h>

#include<sys/types.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<string.h>

#include<unistd.h>

#include<arpa/inet.h>

int main(){

    struct sockaddr_in servAddr;

    memset(&servAddr, 0, sizeof(servAddr));

    servAddr.sin_family = PF_INET;

    servAddr.sin_port = htons(8888);

    servAddr.sin_addr.s_addr = inet_addr("127.0.0.1");

    //socket

    int cliFd = socket(PF_INET, SOCK_STREAM, 0);

    if(-1 == cliFd)

    {

        perror("socket error!");

        return -1;

    }

    //connect

    int ret = connect(cliFd, (struct sockaddr *)&servAddr, sizeof(servAddr));

    if(-1 == ret)

    {

        perror("connect error!");

        close(cliFd);

        return -1;

    }

    printf("connect ok!\n");

    char file[100];

    printf("请输入要传送的文件名: \n");

    gets(file);

    int fd=open(file,O_RDONLY);//打开文件,读文件

    if(-1==fd)

    {

        perror("open file error!\n");

        return -1;

    }

    char buf[100];

    memset(buf,0,sizeof(buf));//清空申请的内存空间

    while(1)

      {

        int re=read(fd,buf,sizeof(buf));

        if(0==re)

        {

            break;

        }

        send(cliFd,buf,re,0);

      }

        return 0;

    }

    

        

嵌入式客户端向服务器端上传文件

2、服务器端代码:

#include<stdio.h>

#include<sys/types.h>

#include<sys/socket.h>

#include<arpa/inet.h>

#include<string.h>

#include<sys/stat.h>

#include<fcntl.h>

#include<unistd.h>

int main()

{

    struct sockaddr_in servAdder;

    memset(&servAdder,0,sizeof(servAdder));

    servAdder.sin_family=PF_INET;

    servAdder.sin_port=htons(8888);

    servAdder.sin_addr.s_addr=inet_addr("127.0.0.1");

    //socket

   int servFd=socket(PF_INET,SOCK_STREAM,0);

   if(-1==servFd)

   {

     perror("socket error\n");

     return -1;

   }

   printf("socket ok\n");

   //bind

   int ret=bind(servFd,(struct sockadder *)&servAdder,sizeof(servAdder));

   if(-1==ret)

   {

       perror("bind error");

       return -1;

   }

   printf("bind ok\n");

    //listen

   ret= listen(servFd,10);

   if(-1==ret)

   {

    perror("listen error");

    return -1;

   }

   printf("listen ok!\n");

    //accept

    int connFd=accept(servFd,NULL,NULL);//对方的地址信息和长度,连接套接字

    if(-1==connFd)

    {

      perror("accept error\n");

      return -1;

    }

     printf("accept ok!\n");

     

     int fd=open("server.txt",O_WRONLY|O_CREAT,0666);

     if(fd<0)

     {

       perror("open file error\n");

       return -1;

     }

     char buf[1024]={0};

     memset(buf,0,sizeof(buf));//清空申请的内存空间

     while(1)

     {

        int rec=recv(connFd,buf,sizeof(buf),0);

        if(0==rec)

        {

        break;

        }   

        write(fd,buf,rec);

     }

     printf("file copy success\n");

     //printf("Allowed contents of flies:\n");

     //puts(buf);

     close(fd);

     close(servFd);

     close(connFd);

return 0;

}

嵌入式客户端向服务器端上传文件

3、  主要设计步骤:

                   (1)创建套接字(不同主机之间的进程进行双向通信的端点)

                   (2)绑定地址信息(bind)

                   (3)发起连接请求(connect)

                   (4)收发消息(send/recv)

                   (5)关闭通信(close)

嵌入式客户端向服务器端上传文件

4、上传文件思路:

 服务器端:

        1、打开文件

             while(1)

             {

         2、接受客户端的消息recv

              If(recv的返回值为0)

              {

              break;

              }

     3、将接受到的消息,写入文件

             }

   

客户端:

        1、打开文件open

           while(1){

        2、读文件read

            If(read返回值为0)

              {

              break;

             }

        3、将读到的内容发送给服务器

             }

嵌入式客户端向服务器端上传文件

5、 根据思路写出上传文件的实现代码:

 服务器端:

          int fd=open("server.txt",O_WRONLY|O_CREAT,0666);

          if(fd<0)

          {

               perror("open file error\n");

              return -1;

          }

         char buf[1024]={0};

         memset(buf,0,sizeof(buf));//清空申请的内存空间

         while(1)

         {

         int rec=recv(connFd,buf,sizeof(buf),0);

         if(0==rec)

         {

              break;

         }   

         write(fd,buf,rec);

         }

        printf("file copy success\n");

       //printf("Allowed contents of flies:\n");

       //puts(buf);

    

客户端:

         int fd=open(file,O_RDONLY);//打开文件,读文件

         if(-1==fd)

         {

             perror("open file error!\n");

             return -1;

         }

         char buf[100];

         memset(buf,0,sizeof(buf));//清空申请的内存空间

         while(1)

         {

             int re=read(fd,buf,sizeof(buf));

             if(0==re)

             {

                 break;

             }

             send(cliFd,buf,re,0);

       }

嵌入式客户端向服务器端上传文件

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢