设为首页 加入收藏

TOP

C/C++大文件/数据网络传输方法(三)
2014-02-08 13:36:21 来源: 作者: 【 】 浏览:385
Tags:C/C 文件 数据 网络传输 方法

 

  // 从服务器端接收数据到buffer中

  bzero(buffer, sizeof(buffer));

  int length = 0;

  while(length = recv(client_socket, buffer, BUFFER_SIZE, 0))

  {

  if (length < 0)

  {

  printf("Recieve Data From Server %s Failed!\n", argv );

  break;

  }

  int write_length = fwrite(buffer, sizeof(char), length, fp);

  if (write_length < length)

  {

  printf("File:\t%s Write Failed!\n", file_name);

  break;

  }

  bzero(buffer, BUFFER_SIZE);

  }

  printf("Recieve File:\t %s From Server[%s] Finished!\n", file_name, argv );

  // 传输完毕,关闭socket

  fclose(fp);

  close(client_socket);

  return 0;

  }

  2.使用现有的通讯中间件

  2.1 ActiveMQ 传送文件接口

  为了解决传输大文件的问题,ActiveMQ在jms规范之外引入了jms streams的概念。PTP模式下,连到同一个destination的两端,可以通过broker中转来传输大文件。

  发送端使用connection.createOutputStream打开一个输出流,往流里写文件。

  OutputStream out =connection.createOutputStream(destination);

  接收端则简单的使用connection.createInputStream拿到一个输入流,从中读取文件数据即可。

  InputStream in = connection.createInputStream(destination)

  2.2 ZeroMQ 接口

  ZeroMQ没有直接提供传送文件的接口。但ZeroMQ中send(void * data, size_t len)接口已经做好了封装,可以send任意大小的数据。代码如下:

  zmq::context_t ctx(1);

  zmq::socket_t sock(ctx, ZMQ_REQ);

  sock.connect("tcp://192.168.20.111:20310");

  sock.send(pData,len);//数据大小没有限制,可以直接发送任意大小的数据

  char reply[100];

  sock.recv (reply,100);

  sock.disconnect(addr);

  接收端代码如下:

  m_context = new zmq::context_t(1);

  m_socket = new zmq::socket_t (*m_context, ZMQ_REP);

  m_socket->bind ("tcp://*:20310");

  zmq::message_t request;

  // Wait for next request from client

  m_socket->recv (&request) // request可以接受发送来的任意大小的数据

  m_socket->send("ok",2);

  是不是很简单呢

  3.基于共享文件、ftp、scp等

  这就不细说了。要么就是写共享目录,要么就是调用系统命令。

  4.总结

  1)直接基于socket编程难度较高,所以不推荐。

  2)使用现有的库方便,但需要学习。一般推荐。

  3)共享文件、ftp、scp等难度低,简单易用,在符合使用场景时是首选。(但一些自命不凡的程序员或许会对你嗤之以鼻,考虑之...)

        

首页 上一页 1 2 3 4 5 下一页 尾页 3/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇code block与VC++下相对路径.. 下一篇C++线段树求区间交,并,补

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Libevent C++ 高并发 (2025-12-26 00:49:30)
·C++ dll 设计接口时 (2025-12-26 00:49:28)
·透彻理解 C 语言指针 (2025-12-26 00:22:52)
·C语言指针详解 (经典 (2025-12-26 00:22:49)
·C 指针 | 菜鸟教程 (2025-12-26 00:22:46)