psycheqiqi 发表于 2009-8-31 10:07:59

传文件 例子

服务器和客户端已连接上,接下来需要传文件,谁能给哥例子啊......

modern 发表于 2009-8-31 11:03:06

站内搜索关键字“传文件”,
另外建议楼主自己独立思考一下传文件的逻辑,
带着问题的去理解别人的使用方法也是很有益处的。

psycheqiqi 发表于 2009-8-31 11:10:49

回复 #2 modern 的帖子

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

不知道对不 ?

psycheqiqi 发表于 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");
}
这是连接上了,然后怎么传文件,给个例子吧。

modern 发表于 2009-9-1 09:34:42

ACE_FILE_Connector与ACE_FILE_IO函数族与网调用络没什么关系。
只是封装了文件打开关闭读写等操作。

既然你已经打开文件了,建立网络连接,读文件,发就成了呗。

psycheqiqi 发表于 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等。
有没有已经实现的例子我参考下....

psycheqiqi 发表于 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;
                  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);

psycheqiqi 发表于 2009-9-1 16:48:54

回复 #7 psycheqiqi 的帖子

现在就剩下读文件的问题了。。。。。。
看了examples的例子也不能读出来,
大神们,救救我吧

modern 发表于 2009-9-1 17:35:03

楼主就算不太了解ACE,
至少C++的fstream该用过吧。
C语言的库函数fopen什么的总该听说过吧。
随便拿一样用就成了,
不必什么都拘泥于一定要拿ACE去实现。

[ 本帖最后由 modern 于 2009-9-2 08:55 编辑 ]
页: [1]
查看完整版本: 传文件 例子