c++用socket,进行文件传输,实现上传与下载文件功能

简介: c++用socket,进行文件传输,实现上传与下载文件功能

用到socket,需要分为服务器端和客户端。

服务器端

1 声明并初始化一个服务端(本地)的地址结构,如果你不知道什么意思,那可以去查一下具体的参数含义。

 
  sockaddr_in server_addr; 
  server_addr.sin_family = AF_INET; 
  server_addr.sin_addr.S_un.S_addr = INADDR_ANY; 
  server_addr.sin_port = htons(PORT); 

//2 初始化socket ,如果初始化失败,那就直接退出。


  WSADATA wsaData; 
  WORD socketVersion = MAKEWORD(2, 0); 
  if(WSAStartup(socketVersion, &wsaData) != 0) 
  { 
    printf("Init socket dll error!"); 
    exit(1); 
  } 

3创建socket,如果初始化失败,那就直接退出。

// 创建socket 
  SOCKET m_Socket = socket(AF_INET, SOCK_STREAM, 0); 
    if (SOCKET_ERROR == m_Socket) 
    { 
      printf("Create Socket Error!"); 
    exit(1); 
    } 

4绑定监听,这是为了监听前端的信息。

//监听 
  if (SOCKET_ERROR == listen(m_Socket, 10)) 
  { 
    printf("Server Listen Failed: %d", WSAGetLastError()); 
    exit(1); 
  } 

5读取信息,并且打印。

    char buffer[BUFFER_SIZE]; 
    memset(buffer, 0, BUFFER_SIZE); 
    if (recv(m_New_Socket, buffer, BUFFER_SIZE, 0) < 0) 
    { 
      printf("Client Receive Data Failed!"); 
      break; 
    } 
    
    std::cout<<buffer<<endl;

其实最重要的是buffer。只要buffer打印的是传送过来的内容,并且没有错的话。那就可以通过这个buffer做很多东西了。我们可以在buffer里面装上一个协议,当协议为1的时候就上传内容,当协议为2的时候下载内容。然后文本内容也是在buffer里面一起传送过来就行。然后再见到地保存到服务器所在的本地文件。

客户端

1初始化socket

// 初始化socket dll 
  WSADATA wsaData; 
  WORD socketVersion = MAKEWORD(2, 0); 
  if(WSAStartup(socketVersion, &wsaData) != 0) 
  { 
    printf("Init socket dll error!"); 
    exit(1); 
  } 

2创建socket,指定服务器地址参数

//创建socket 
      SOCKET c_Socket = socket(AF_INET, SOCK_STREAM, 0); 
      if (SOCKET_ERROR == c_Socket) 
      { 
          printf("Create Socket Error!"); 
          system("pause"); 
          exit(1); 
      } 
 
      //指定服务端的地址 
      sockaddr_in server_addr; 
      server_addr.sin_family = AF_INET; 
      server_addr.sin_addr.S_un.S_addr = inet_addr(SERVER_IP); 
      server_addr.sin_port = htons(PORT); 

3连接服务器,如果连接失败,那就关闭。

if (SOCKET_ERROR == connect(c_Socket, (LPSOCKADDR)&server_addr, sizeof(server_addr))) 
      { 
          printf("Can Not Connect To Client IP!\n"); 
          system("pause"); 
          exit(1); 
      } 

4向服务器请求指令,是上传,还是下载。

        if(send(c_Socket, buffer, BUFFER_SIZE, 0) < 0) 
        { 
              printf("Send File Name Failed\n"); 
              system("pause"); 
              exit(1); 
        } 

buffer里面送了协议指令,也就是刚刚说的:当协议为1的时候就上传内容,当协议为2的时候下载内容。然后再加上文件内容就行。注意,这里面下载内容还需要加上接受服务器的信息,也就是当服务器把文件传送回来的时候,能够保存在客户端的本地。

其实完整的网络传输用到了socket,整个框架也不算太难。有需要深入探究的,可以关注公众号:诗一样的代码。和我一起探讨吧。

相关文章
|
1月前
|
监控 Linux C++
4步实现C++插件化编程,轻松实现功能定制与扩展(2)
本文是《4步实现C++插件化编程》的延伸,重点介绍了新增的插件“热拔插”功能。通过`inotify`接口监控指定路径下的文件变动,结合`epoll`实现非阻塞监听,动态加载或卸载插件。核心设计包括`SprDirWatch`工具类封装`inotify`,以及`PluginManager`管理插件生命周期。验证部分展示了插件加载与卸载的日志及模块状态,确保功能稳定可靠。优化过程中解决了动态链接库句柄泄露问题,强调了采纳用户建议的重要性。
60 11
4步实现C++插件化编程,轻松实现功能定制与扩展(2)
|
1月前
|
IDE 编译器 项目管理
Dev-C++保姆级安装教程:Win10/Win11环境配置+避坑指南(附下载验证)
Dev-C++ 是一款专为 Windows 系统设计的轻量级 C/C++ 集成开发环境(IDE),内置 MinGW 编译器与调试器,支持代码高亮、项目管理等功能。4.9.9 版本作为经典稳定版,适合初学者和教学使用。本文详细介绍其安装流程、配置方法、功能验证及常见问题解决,同时提供进阶技巧和扩展学习资源,帮助用户快速上手并高效开发。
|
6月前
|
监控 Python
视频监控笔记(五):Jetson Nano上通过Tkinter和Socket实现GUI文件传输
这篇文章介绍了如何使用Python的Tkinter和Socket在Jetson Nano上实现图形用户界面(GUI)的文件传输系统,包括服务器端和客户端,能够进行文件的发送和接收,并展示传输进度。
95 1
|
6月前
|
存储 C++ UED
【实战指南】4步实现C++插件化编程,轻松实现功能定制与扩展
本文介绍了如何通过四步实现C++插件化编程,实现功能定制与扩展。主要内容包括引言、概述、需求分析、设计方案、详细设计、验证和总结。通过动态加载功能模块,实现软件的高度灵活性和可扩展性,支持快速定制和市场变化响应。具体步骤涉及配置文件构建、模块编译、动态库入口实现和主程序加载。验证部分展示了模块加载成功的日志和配置信息。总结中强调了插件化编程的优势及其在多个方面的应用。
815 74
|
3月前
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
73 5
|
3月前
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
4月前
|
算法 网络协议 数据挖掘
C++是一种功能强大的编程语言,
C++是一种功能强大的编程语言,
96 14
|
6月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
322 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
6月前
|
Linux C++
Linux c/c++文件的基本操作
在Linux环境下使用C/C++进行文件的基本操作,包括文件的创建、写入、读取、关闭以及文件描述符的定位。
70 0
Linux c/c++文件的基本操作
|
7月前
|
C++ 内存技术
[转]Visual C++内嵌swf文件并播放
[转]Visual C++内嵌swf文件并播放

热门文章

最新文章