初级问题
本人只是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
对了...建立文件时代码是这样的
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); ACE_Message_Block *p = mb; p != NULL; p=p->cont()
----
这行,里面的消息块内容是什么?怎么链接到一起的? 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 static/image/common/back.gif
貌似接收到内容没有问题,写入文件就出问题!
写文件时的症状是这样的,服务端第一次运行时,写入的文件是乱码 ...
写的乱码,那说明你内存的东西是乱的。问题应该不在写入上面,在你内存操作上面有问题。仔细排查内存的写入部分。 我已经在上面输出了内存中的数据...上面图里可以看得到...和客户端发送的是一样的! 问题已经解决,由于我写入串时把\0一起写入到文件里了...我把\0去掉就好了.....
但是还是不知道为什么写入\0会出现这种情况
谢谢winston的帮助 baisaichen 发表于 2012-4-12 16:01 static/image/common/back.gif
问题已经解决,由于我写入串时把\0一起写入到文件里了...我把\0去掉就好了.....
但是还是不知道为什么写入\0 ...
果然是内存操作问题。\0只是c字符串的惯用定义,并不是所有的类库都用这个定义和规则,也许它们自己定义了一套模式。
页:
[1]