baisaichen 发表于 2012-4-10 18:11:01

初级问题


本人只是ACE的菜鸟,刚接触没几天,今天遇到一个问题

size_t count = 0;
    for (ACE_Message_Block *p = mb; p != NULL; p=p->cont())
    {
      count += log_file.send_n(p->rd_ptr(), p->length());
      for (int i = 0; i < p->length(); ++i)
      {
            std::cout << (*(p->rd_ptr()+i));
      }
    }

    ACE_DEBUG((LM_ERROR, "%p\n", "write log"));
    return count;
    //return log_file.send_n(mb);

代码如上,输出如下:


写入文件中正常,又不正常,,,,每次第一次连接后写 入的字符是乱码,第二次后,又正常了,第一次的数据也正常了....不知道为什么.....求大神解释.....
file:///C:/Documents%20and%20Settings/Administrator/Application%20Data/Tencent/Users/361403737/QQ/WinTemp/RichOle/29VTU7@P%7%29A%7BCC7Q%28YFR%7B8.jpg

baisaichen 发表于 2012-4-10 18:19:40

对了...建立文件时代码是这样的
ACE_FILE_Connector filecon;
filecon.connect(log_file, ACE_FILE_Addr(filename.c_str()), 0, ACE_Addr::sap_any, 0, O_RDWR | O_APPEND | O_CREAT);

winston 发表于 2012-4-10 20:52:16

ACE_Message_Block *p = mb; p != NULL; p=p->cont()
----
这行,里面的消息块内容是什么?怎么链接到一起的?

baisaichen 发表于 2012-4-10 21:20:16

winston 发表于 2012-4-10 20:52 static/image/common/back.gif
ACE_Message_Block *p = mb; p != NULL; p=p->cont()
----
这行,里面的消息块内容是什么?怎么链接到一起 ...

链到一起的消息,最开始放的,ip地址后面就是发送的内容,如果消息过长就会分开!

baisaichen 发表于 2012-4-10 22:00:33

貌似接收到内容没有问题,写入文件就出问题!
写文件时的症状是这样的,服务端第一次运行时,写入的文件是乱码如图


如果结束这次的运行,再次运行后,如果写入文件后,文件又好了,,,内空正确,连带第一次写入的数据也正常了!

winston 发表于 2012-4-10 22:54:07

baisaichen 发表于 2012-4-10 22:00 static/image/common/back.gif
貌似接收到内容没有问题,写入文件就出问题!
写文件时的症状是这样的,服务端第一次运行时,写入的文件是乱码 ...

写的乱码,那说明你内存的东西是乱的。问题应该不在写入上面,在你内存操作上面有问题。仔细排查内存的写入部分。

baisaichen 发表于 2012-4-10 22:55:37

我已经在上面输出了内存中的数据...上面图里可以看得到...和客户端发送的是一样的!

baisaichen 发表于 2012-4-12 16:01:03

问题已经解决,由于我写入串时把\0一起写入到文件里了...我把\0去掉就好了.....
但是还是不知道为什么写入\0会出现这种情况

谢谢winston的帮助

winston 发表于 2012-4-12 17:55:59

baisaichen 发表于 2012-4-12 16:01 static/image/common/back.gif
问题已经解决,由于我写入串时把\0一起写入到文件里了...我把\0去掉就好了.....
但是还是不知道为什么写入\0 ...

果然是内存操作问题。\0只是c字符串的惯用定义,并不是所有的类库都用这个定义和规则,也许它们自己定义了一套模式。
页: [1]
查看完整版本: 初级问题