AnyChat技术支持论坛

标题: 数据传输问题 [打印本页]

作者: smilehui2014    时间: 2016-8-25 21:40
标题: 数据传输问题
// 透明通道数据回调函数定义
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;
}

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


作者: 佰锐科技-刘洋    时间: 2016-8-26 10:13
你好 我们这里验证一下 稍后给您回复
作者: 佰锐科技-刘洋    时间: 2016-8-26 10:50
你好,看下工程里面默认的字符集是什么设置一下你需要的字符集,工程->右键属性->配置属性->常规,右边“字符集”一栏选择使用的字符集。多一些字符是因为你在代码里面字符转换的原因,你用下面这个代码试一试:
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。
作者: smilehui2014    时间: 2016-8-26 14:12
接收端默认的是多字节字符集,客户端是utf8编码,透明通道是没有问题的啊,扩张通道收到的数据是多字符的?

作者: smilehui2014    时间: 2016-8-26 14:16
昨天咨询给出的建议是给字节数组转码,先转成utf8,请问字节数组转码用C++ 怎么实现
作者: 佰锐科技-邵光清    时间: 2016-8-26 15:53
smilehui2014 发表于 2016-8-26 14:16
昨天咨询给出的建议是给字节数组转码,先转成utf8,请问字节数组转码用C++ 怎么实现

您好,会不会是代码问题呢?参考一下:http://blog.csdn.net/segen_jaa/article/details/6447874/
作者: smilehui2014    时间: 2016-8-28 01:11
如果代码有问题,透明通道不应该是正常的啊,问题是 只有服务器接收的时候有问题,服务器使用扩展通道向客户端发送数据是正确的啊
作者: 佰锐科技-刘洋    时间: 2016-8-29 10:09
你可以网上下载我们的demo用我们的demo透明通道扩展传输发送数据对比一下看看问题出在哪里
作者: 佰锐科技-邵光清    时间: 2016-8-29 11:42
smilehui2014 发表于 2016-8-28 01:11
如果代码有问题,透明通道不应该是正常的啊,问题是 只有服务器接收的时候有问题,服务器使用扩展通道向客 ...

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




欢迎光临 AnyChat技术支持论坛 (http://bbs.anychat.cn/) Powered by Discuz! X3