Open GoogleCodeExporter opened 9 years ago
我在三星的i8320上编译了一个版本,运行正常,但经常出现错
误提示
iconv failed err: Invalid or incomplete multibyte or wide character
Original comment by euzen...@gmail.com
on 4 Sep 2010 at 4:17
iconv failed err: Invalid or incomplete multibyte or wide character
一样
Original comment by zht...@gmail.com
on 11 Sep 2010 at 7:59
[deleted comment]
1.对zhtx10遇到的问题,我也一直存在,我今天看了看代码,试
了试,发现这是包管理线程的退出问题,主要是在packetmgr.c的
packetmgr_recv函数中,
ret = qqsocket_recv( qq->socket, recv_buf, PACKET_SIZE-pos );
看这个调用的源代码就知道了,它调用了个阻塞函数recv,我�
��linux不是很熟悉,这个多长时间会超时或者什么的,我不是�
��确信,但问题的确出现在这里,我试了一下,我想让它在5��
�中没有数据到来就超时退出,我把qqsocket.c的qqsocket_recv函数��
�成这样:
int qqsocket_recv( int fd, uchar* buf, size_t size )
{
int ret;
fd_set ds;
struct timeval timeout;
FD_ZERO(&ds);
FD_SET(fd,&ds);
timeout.tv_sec = 5;
timeout.tv_usec = 0;
ret = select(fd+1,&ds,NULL,NULL,&timeout);
if(ret==-1)
return ret;
if(ret>0&&FD_ISSET(fd,&ds)){
ret = recv( fd, (char*)buf, size, 0 );
return ret;
}
return -1;
}
只要你让这个超时时间可以接受,你在命令行里面给个x,肯定
就能退出了。我也不知道为什么,send在就不会出现这样的问�
��。
2.另外,euzenlee和zhtx10都提到的iconv问题,这个好像是只有在中�
��列表接收的时候才会出现。这个我也不知道,没功夫看,我
也被这个困扰着呢。等有机会了,瞅瞅去
Original comment by kcyn...@gmail.com
on 9 Oct 2010 at 2:58
还有一个问题。有的时候好友备注名称不能全部抓下来。。
另外还想要一个文档 ;-)
Original comment by zht...@gmail.com
on 10 Oct 2010 at 7:55
其实不是不能全部抓下来,而是还没有完成。这个取决于网��
�。你看那个qqclient_keepalive函数,
//等待登陆完毕
if(qq->login_finish==0){
}
这个位置,只有当这个里面的qq->login_finish=1;
只有当这个登陆过程全部结束之后你才能看到完整的信息,��
�且此后的消息发送才能成功。如果你在登陆完成之前就开始�
��送消息,就成功不了,说不定以后的消息就再也不了。至少
,linux下的表现是这样。
至于文档,只能靠自己看代码了,我也没细看过,我只是在��
�儿遇到问题我才会看哪儿。比如,linux下退不出来(或者是��
�久才能退出,这大概取决于socket的超时时间吧;但在windows下
却不是这样)我才会一点点跟踪到这个地方。我在linux下经常
在未登陆完成之前就发消息,当然就失败了,我也才会注意��
�这个登陆完成点的代码。
Original comment by kcyn...@gmail.com
on 7 Dec 2010 at 8:17
其实,还可以慢慢加入收发文件,表情图片之类的
Original comment by Allen.Tsau
on 9 May 2011 at 4:49
iconv 的问题 刚刚有看:
有两个地方注意一下:
1. 是如下的字符串长度 1024 有时候是不够的。
2. dump 出来的字符串在gbk
->utf8的过程中有错。有看到错误数据。但是不知道错误数据��
�哪里来的。
看样子装换的时候要添加一些check
机制。不能一次组成字符串然后装换。看到出错的地方qq上面
是一个方框。
static void print_string(char *str)
{
#ifdef __WIN32__
printf( str );
#else
FILE *fp= fopen("hd.txt","a+");
int length = strlen(str);
fwrite(str,1,length,fp);
fclose(fp);
int tempcount = (length %1024 +1)*1024;
char tempstr[tempcount];
gb_to_utf8( str, tempstr, sizeof(tempstr) );
printf( tempstr );
fflush(stdout);
#endif
}
Original comment by xhd3...@gmail.com
on 27 Aug 2011 at 7:42
i8320的“iconv failed err: Invalid or incomplete multibyte or wide character
”,
这个问题可能是因为特殊字符的问题,我用to命令到一个带☆
的名字的用户出现这个错误,全英文名字的没这个错误。
Original comment by Qingshen...@gmail.com
on 18 Nov 2011 at 8:18
Original issue reported on code.google.com by
zht...@gmail.com
on 28 Aug 2010 at 10:31