找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4058|回复: 8

传文件 例子

[复制链接]
发表于 2009-8-31 10:07:59 | 显示全部楼层 |阅读模式
服务器和客户端已连接上,接下来需要传文件,谁能给哥例子啊......
发表于 2009-8-31 11:03:06 | 显示全部楼层
站内搜索关键字“传文件”,
另外建议楼主自己独立思考一下传文件的逻辑,
带着问题的去理解别人的使用方法也是很有益处的。
 楼主| 发表于 2009-8-31 11:10:49 | 显示全部楼层

回复 #2 modern 的帖子

我理解的就是:
服务器先连接要传的文件,然后读出文件的内容,通过缓冲区发送出去;
服务器端连接目的文件,读出缓冲区的数据,然后写入文件。

不知道对不 ?
 楼主| 发表于 2009-8-31 16:40:21 | 显示全部楼层

回复 #2 modern 的帖子

不明白传文件的transmit file如何用

ACE_FILE_Addr file_addr;
file_addr.set("1.txt");
ACE_FILE_IO file;
ACE_FILE_Connector file_connector;
if (file_connector.connect(file,
        file_addr,
        0,
               ACE_Addr::sap_any,
        0,
               O_RDWR|O_CREAT|O_APPEND
              )   == -1)
{
         printf("error");
}
这是连接上了,然后怎么传文件,给个例子吧。
发表于 2009-9-1 09:34:42 | 显示全部楼层
ACE_FILE_Connector与ACE_FILE_IO函数族与网调用络没什么关系。
只是封装了文件打开关闭读写等操作。

既然你已经打开文件了,建立网络连接,读文件,发就成了呗。
 楼主| 发表于 2009-9-1 15:34:37 | 显示全部楼层

回复 #5 modern 的帖子

要崩溃了............
服务器端
ACE_FILE_Info fileinfo;
ACE_FILE_Addr file_addr;
file_addr.set("1.txt");
ACE_FILE_IO file;
ACE_FILE_Connector file_connector;
if (file_connector.connect(file,
file_addr,
0,
ACE_Addr::sap_any,
0,
O_RDWR|O_CREAT|O_APPEND
) == -1)
{
printf("error");
}
此时服务器端连接了1.txt,同理客户端连接2.txt
现在我想把1.txt中的内容发到2.txt中。

我想的是通过file.recv(buffer,length);send(buffer)。
然后在客户端recv(buffer);file.send(buffer,length).来实现

但是在实现的过程中出现很多错误:比如resources unavailable等。
有没有已经实现的例子我参考下....
 楼主| 发表于 2009-9-1 16:15:38 | 显示全部楼层

回复 #6 psycheqiqi 的帖子

写文件正常
但读文件时出现
recv:Resource temporarily unavailable
代码:
char *buf="12345";
          ssize_t len = ACE_OS::strlen (buf) + 1;
                 
                  if (file.send (buf, len-1) != len-1)
                          ACE_ERROR_RETURN ((LM_ERROR,
                          "%p\n",
                          "send"),
                          1);
                  if (file.get_info (&fileinfo) == -1)
                          ACE_ERROR_RETURN ((LM_ERROR,
                          "%p\n",
                          "get_info"),
                          1);
                  else
                          ACE_OS::printf ("fileinfo : mode = %o\nno of links = %lu\nsize = %lu\n",
                          (u_int) fileinfo.mode_ & 0777,
                          ACE_static_cast(u_long ,fileinfo.nlink_),
                    (u_long) fileinfo.size_);

                  ACE_TCHAR *readback = new ACE_TCHAR[len + 1];
                  if (file.recv (readback, len) != len)
                  {          
                          ACE_ERROR_RETURN ((LM_ERROR,
                                  "%p\n",
                                  "recv"),
                                  1);
                  }
                  printf("-----");
                  ACE_OS::printf ("read back :%s\n",
                  readback);

       
           
                         if (file.close () == -1)
                                 ACE_ERROR_RETURN ((LM_ERROR,
                                 "%p\n",
                                 "close"),
                                 1);
 楼主| 发表于 2009-9-1 16:48:54 | 显示全部楼层

回复 #7 psycheqiqi 的帖子

现在就剩下读文件的问题了。。。。。。
看了examples的例子也不能读出来,
大神们,救救我吧
发表于 2009-9-1 17:35:03 | 显示全部楼层
楼主就算不太了解ACE,
至少C++的fstream该用过吧。
C语言的库函数fopen什么的总该听说过吧。
随便拿一样用就成了,
不必什么都拘泥于一定要拿ACE去实现。

[ 本帖最后由 modern 于 2009-9-2 08:55 编辑 ]
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-23 13:25 , Processed in 0.017046 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表