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,整个框架也不算太难。有需要深入探究的,可以关注公众号:诗一样的代码。和我一起探讨吧。

相关文章
|
2月前
|
监控 Python
视频监控笔记(五):Jetson Nano上通过Tkinter和Socket实现GUI文件传输
这篇文章介绍了如何使用Python的Tkinter和Socket在Jetson Nano上实现图形用户界面(GUI)的文件传输系统,包括服务器端和客户端,能够进行文件的发送和接收,并展示传输进度。
46 1
|
9天前
|
算法 网络协议 数据挖掘
C++是一种功能强大的编程语言,
C++是一种功能强大的编程语言,
39 14
|
2月前
|
存储 C++ UED
【实战指南】4步实现C++插件化编程,轻松实现功能定制与扩展
本文介绍了如何通过四步实现C++插件化编程,实现功能定制与扩展。主要内容包括引言、概述、需求分析、设计方案、详细设计、验证和总结。通过动态加载功能模块,实现软件的高度灵活性和可扩展性,支持快速定制和市场变化响应。具体步骤涉及配置文件构建、模块编译、动态库入口实现和主程序加载。验证部分展示了模块加载成功的日志和配置信息。总结中强调了插件化编程的优势及其在多个方面的应用。
336 68
|
2月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
173 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
2月前
|
Linux C++
Linux c/c++文件的基本操作
在Linux环境下使用C/C++进行文件的基本操作,包括文件的创建、写入、读取、关闭以及文件描述符的定位。
24 0
Linux c/c++文件的基本操作
|
3月前
|
C++ 内存技术
[转]Visual C++内嵌swf文件并播放
[转]Visual C++内嵌swf文件并播放
|
2月前
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
60 0
|
2月前
|
Linux C++
Linux c/c++文件移动
这篇文章介绍了在Linux环境下,使用C/C++语言通过命令方式和文件操作方式实现文件移动的方法。
81 0
|
3月前
|
Linux API C++
超级好用的C++实用库之文件目录操作
超级好用的C++实用库之文件目录操作
39 0
|
3月前
|
JavaScript 前端开发 测试技术
一个google Test文件C++语言案例
这篇文章我们来介绍一下真正的C++语言如何用GTest来实现单元测试。
25 0