设为首页收藏本站

AnyChat技术支持论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 3873|回复: 8
打印 上一主题 下一主题

数据传输问题

[复制链接]

36

主题

97

帖子

366

积分

中级会员

Rank: 3Rank: 3

积分
366
跳转到指定楼层
楼主
发表于 2016-8-25 21:40:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
// 透明通道数据回调函数定义
void CALLBACK OnTransBufferCallBack(DWORD dwUserId, LPBYTE lpBuf, DWORD dwLen, LPVOID lpUserValue)
{
        CString rescodestring;
        rescodestring = (CString)lpBuf;
        ConvertUtf8ToGBK(rescodestring);


// 透明通道数据扩展回调函数定义
void CALLBACK OnTransBufferExCallBack(DWORD dwUserId, LPBYTE lpBuf, DWORD dwLen, DWORD wParam, DWORD lParam, DWORD dwTaskId, LPVOID lpUserValue)
{
          
            CString Rescodestring;
            Rescodestring = (CString)lpBuf;
                ConvertUtf8ToGBK(Rescodestring);

void ConvertUtf8ToGBK(CString& strUtf8) {
    int len=MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, NULL,0);
    unsigned short * wszGBK = new unsigned short[len+1];
    memset(wszGBK, 0, len * 2 + 2);
    MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, (LPWSTR)wszGBK, len);

    len = WideCharToMultiByte(CP_ACP, 0, (LPWSTR)wszGBK, -1, NULL, 0, NULL, NULL);
    char *szGBK=new char[len + 1];
    memset(szGBK, 0, len + 1);
    WideCharToMultiByte (CP_ACP, 0, (LPWSTR)wszGBK, -1, szGBK, len, NULL,NULL);

    strUtf8 = szGBK;
    delete[] szGBK;
    delete[] wszGBK;
}

你好,相同的代码,透明通道数据传输正常,扩展通道传输,数据有时会多出一些字符,请问该怎么解决

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

2

主题

336

帖子

1243

积分

金牌会员

Rank: 6Rank: 6

积分
1243
沙发
发表于 2016-8-26 10:13:33 | 只看该作者
你好 我们这里验证一下 稍后给您回复
回复 支持 反对

使用道具 举报

2

主题

336

帖子

1243

积分

金牌会员

Rank: 6Rank: 6

积分
1243
板凳
发表于 2016-8-26 10:50:55 | 只看该作者
你好,看下工程里面默认的字符集是什么设置一下你需要的字符集,工程->右键属性->配置属性->常规,右边“字符集”一栏选择使用的字符集。多一些字符是因为你在代码里面字符转换的原因,你用下面这个代码试一试:
void ConvertUtf8ToGBK(CString& strUtf8) {
   int len=MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, NULL,0);
    wchar_t * wszGBK = new wchar_t[len];


这里用wchar_t会好点,因为c++内置wchar_t。
回复 支持 反对

使用道具 举报

36

主题

97

帖子

366

积分

中级会员

Rank: 3Rank: 3

积分
366
地板
 楼主| 发表于 2016-8-26 14:12:26 | 只看该作者
接收端默认的是多字节字符集,客户端是utf8编码,透明通道是没有问题的啊,扩张通道收到的数据是多字符的?
回复 支持 反对

使用道具 举报

36

主题

97

帖子

366

积分

中级会员

Rank: 3Rank: 3

积分
366
5#
 楼主| 发表于 2016-8-26 14:16:20 | 只看该作者
昨天咨询给出的建议是给字节数组转码,先转成utf8,请问字节数组转码用C++ 怎么实现
回复 支持 反对

使用道具 举报

6#
发表于 2016-8-26 15:53:37 | 只看该作者
smilehui2014 发表于 2016-8-26 14:16
昨天咨询给出的建议是给字节数组转码,先转成utf8,请问字节数组转码用C++ 怎么实现

您好,会不会是代码问题呢?参考一下:http://blog.csdn.net/segen_jaa/article/details/6447874/
回复 支持 反对

使用道具 举报

36

主题

97

帖子

366

积分

中级会员

Rank: 3Rank: 3

积分
366
7#
 楼主| 发表于 2016-8-28 01:11:23 | 只看该作者
如果代码有问题,透明通道不应该是正常的啊,问题是 只有服务器接收的时候有问题,服务器使用扩展通道向客户端发送数据是正确的啊
回复 支持 反对

使用道具 举报

2

主题

336

帖子

1243

积分

金牌会员

Rank: 6Rank: 6

积分
1243
8#
发表于 2016-8-29 10:09:36 | 只看该作者
你可以网上下载我们的demo用我们的demo透明通道扩展传输发送数据对比一下看看问题出在哪里
回复 支持 反对

使用道具 举报

9#
发表于 2016-8-29 11:42:27 | 只看该作者
smilehui2014 发表于 2016-8-28 01:11
如果代码有问题,透明通道不应该是正常的啊,问题是 只有服务器接收的时候有问题,服务器使用扩展通道向客 ...

请使用透明通道api传输数据先,透明通道扩展api的异常问题等解决之后第一时间通知您!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|AnyChat ( 粤ICP备13022410号-1 )  

GMT+8, 2024-4-25 06:50 , Processed in 0.127881 second(s), 21 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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