使用VxWorks实现网络文件传输

作者:佚名 上传时间:2023-04-29 运行软件:VxWorks开发团队 软件版本:VxWorks 7 版权申诉

该示例代码演示了如何使用VxWorks操作系统实现网络文件传输功能,包括文件上传、文件下载和文件列表展示等。该实现方式基于VxWorks提供的套接字(socket)接口和文件系统接口。

#include <vxWorks.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <ioLib.h>

#define SERVER_PORT 8888
#define SERVER_ADDR "192.168.0.1"

void receive_file(int sock_fd, char* filename) {
  FILE* fp = fopen(filename, "wb");
  if (!fp) {
    printf("Error opening file.\n");
    exit(EXIT_FAILURE);
  }

  int bytes_received;
  char buffer[1024];
  while ((bytes_received = recv(sock_fd, buffer, sizeof(buffer), 0)) > 0) {
    fwrite(buffer, bytes_received, 1, fp);
  }

  fclose(fp);
}

void send_file(int sock_fd, char* filename) {
  FILE* fp = fopen(filename, "rb");
  if (!fp) {
    printf("Error opening file.\n");
    exit(EXIT_FAILURE);
  }

  int bytes_sent;
  char buffer[1024];
  while (!feof(fp)) {
    bytes_sent = fread(buffer, 1, sizeof(buffer), fp);
    send(sock_fd, buffer, bytes_sent, 0);
  }

  fclose(fp);
}

void send_file_list(int sock_fd) {
  DIR* dirp;
  struct dirent* dp;
  char file_list[1024];

  dirp = opendir(".");
  if (dirp == NULL) {
    printf("Error opening directory.\n");
    exit(EXIT_FAILURE);
  }

  while ((dp = readdir(dirp)) != NULL) {
    if (dp->d_type == DT_REG) {
      strcat(file_list, dp->d_name);
      strcat(file_list, "\n");
    }
  }

  send(sock_fd, file_list, strlen(file_list), 0);
  closedir(dirp);
}

void handle_client(int sock_fd) {
  int option, bytes_received;
  char filename[256];
  bzero(&filename, sizeof(filename));

  bytes_received = recv(sock_fd, &option, sizeof(option), 0);
  if (bytes_received < 0) {
    printf("Error receiving option.\n");
    return;
  }

  switch (option) {
    case 1:
      bytes_received = recv(sock_fd, filename, sizeof(filename), 0);
      if (bytes_received < 0) {
        printf("Error receiving filename.\n");
        return;
      }
      receive_file(sock_fd, filename);
      break;
    case 2:
      bytes_received = recv(sock_fd, filename, sizeof(filename), 0);
      if (bytes_received < 0) {
        printf("Error receiving filename.\n");
        return;
      }
      send_file(sock_fd, filename);
      break;
    case 3:
      send_file_list(sock_fd);
      break;
    default:
      printf("Invalid option.\n");
  }
}

void main() {
  int server_fd, client_fd;
  struct sockaddr_in server_addr, client_addr;

  server_fd = socket(AF_INET, SOCK_STREAM, 0);
  if (server_fd < 0) {
    printf("Error creating socket.\n");
    exit(EXIT_FAILURE);
  }

  bzero(&server_addr, sizeof(server_addr));
  server_addr.sin_family = AF_INET;
  server_addr.sin_addr.s_addr = inet_addr(SERVER_ADDR);
  server_addr.sin_port = htons(SERVER_PORT);

  if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
    printf("Error binding socket.\n");
    exit(EXIT_FAILURE);
  }

  listen(server_fd, 5);

  while (1) {
    int client_addr_size = sizeof(client_addr);
    client_fd = accept(server_fd, (struct sockaddr*)&client_addr, &client_addr_size);
    if (client_fd < 0) {
      printf("Error accepting client.\n");
      continue;
    }

    handle_client(client_fd);
    close(client_fd);
  }
}

免责申明:文章和图片全部来源于公开网络,如有侵权,请通知删除 server@dude6.com

用户评论
相关推荐
使用VxWorks实现网络文件传输
该示例代码演示了如何使用VxWorks操作系统实现网络文件传输功能,包括文件上传、文件下载和文件列表展示等。该实现方式基于VxWorks提供的套接字(socket)接口和文件系统接口。#includ
VxWorks 7
VxWorks开发团队
2023-04-29 20:00
java实现网络文件传输
含服务器和客户端两端程序,设计socket编程,接口技术等
rar
0B
2018-12-25 07:22
vc实现网络文件传输
《VisualC++网络通信编程实用案例精选》配套源码\点对点文件传输【\chap5\Transfer】大型文件传输【\chap5\Transfer】端口扫描程序【\chap5\MyPortScann
RAR
0B
2019-09-08 15:30
VxWorks实现文件传输的方法
介绍了VxWorks中基于FTP协议进行文件传输的方法,涵盖了客户端和服务器端的代码实现过程。(客户端代码)#include <stdio.h>#include <inetLi
VxWorks 7.0
FTP协议库
2023-05-22 20:11
C++实现网络文件传输
C++实现多线程网络文件传输、
ZIP
0B
2019-05-03 23:38
VxWorks实现文件传输的示例代码
本示例代码演示了如何使用VxWorks操作系统下的FTP调用库实现文件传输功能。#include <stdio.h>#include <ftpLib.h>#include
VxWorks 7.0
Wind River Systems
2023-04-08 01:25
VxWorks实现文件传输的示例代码
该示例代码演示了在VxWorks操作系统中实现文件传输的方法。该功能可以将文件从一个设备传输到另一个设备,并通过代码注释和打印信息进行了详细解释。#include <stdio.h>#
VxWorks 7.0
VxWorks
2023-10-12 04:46
vxworks网络编程
学习网络编成的好帮手,vxworks资料不多,网络编程方面的更是难得
PDF
0B
2019-02-28 09:23
vxworks网络驱动
一步一步详细讲解vxworks网络程序的开发!
doc
0B
2019-03-31 02:22
VxWorks网络编程
网络网络编程编程网络编程网络编程网络编程网络编程网络编程网络编程网络编程网络编程网络编程
RAR
0B
2019-01-02 04:38