默认
发表评论 31
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
udp协议本身就是有度限制的,《UDP中一个包的大小最大能多大》。

你的数据准确的长度有多少字节?
评论 31
引用:harlan 发表于 2022-11-02 16:00
聊天消息,长度不知道控制在多少

那就用tcp
引用:harlan 发表于 2022-11-03 10:21
怎么处理udp发送比较长的信息,现在用这个sdk就是发送比较长的发不出去,到服务器json解析直接失败,查看 ...

udp你要硬搞长包,那就只能分片分包传输,然后收到后再组包,这又涉及到分片顺序、包的送达质量保证等等,等做好这些你就会发些,这不就是tcp吗。。。
引用:harlan 发表于 2022-11-03 10:42
那有没有好点的加密,现在用的加密AES结果出来是数据长度是成倍增长的,有没得好点的解决加密的办法

AES加密强度太大了,换个弱一点的
引用:harlan 发表于 2022-11-03 11:18
就是没有找到合适的,有没得推荐,最好是加密后长度和明文长度差不多那种,楼主可以给个方案吗

你研究一下加密算法用RC4:https://www.cnblogs.com/mfrbuaa/p/5405809.html
引用:harlan 发表于 2022-11-03 15:56
udp情况,发送短消息可以正常使用,发送150+长度接收方收不到信息,下面是日志打印

你加密后的完整Protocal协议包,大约有多少字节?
引用:harlan 发表于 2022-11-04 10:55
1060个字节

这样的长度,真有可能会超长。既然加密加要求高,你什么钟爱udp?
引用:harlan 发表于 2022-11-04 11:29
我不解的是客服端到我服务端这儿都是正常的,服务器这边是可以看到消息的,发给接收方就不行了

你把包搞小一点,试着找到长度边界。udp包长这个问题,没有个统一的硬性标准
引用:harlan 发表于 2022-11-04 16:30
我在onTransferMessage4C2CBefore,C2C发送之前验证消息,失败返回false之后,但是发送发客服端收到的还 ...

把你的完整代码贴出来看看

看不到图,直接贴文本代码
引用:harlan 发表于 2022-11-04 11:35
我在onTransferMessage4C2CBefore,C2C发送之前验证消息,失败返回false之后,但是发送发客服端收到的还是 ...

这是sdk里的代码逻辑(注意看第14和第18行):
                    case ProtocalType.C.FROM_CLIENT_TYPE_OF_COMMON$DATA:
                    {
                            logger.info("[IMCORE-{}]<< 收到客户端{}的通用数据发送请求.", Gateway.$(session), remoteAddress);
        
                            if(serverEventListener != null)
                            {
                                    if(!OnlineProcessor.isLogined(session))
                                    {
                                            LocalSendHelper.replyDataForUnlogined(session, pFromClient, null);
                                            return;
                                    }
                                    
                                    if("0".equals(pFromClient.getTo())){
                                            if(serverEventListener.onTransferMessage4C2SBefore(pFromClient, session)){
                                                    logicProcessor.processC2SMessage(session, pFromClient, remoteAddress);
                                            }
                                    } else{
                                            if(serverEventListener.onTransferMessage4C2CBefore(pFromClient, session)){
                                                    logicProcessor.processC2CMessage(bridgeProcessor, session, pFromClient, remoteAddress);
                                            }
                                    }
                            }
                            else
                            {
                                    logger.warn("[IMCORE-{}]<< 收到客户端{}的通用数据传输消息,但回调对象是null,回调无法继续.", Gateway.$(session), remoteAddress);
                            }
                            break;
                    }

代码里的逻辑就是:一旦你返回false,它就不可能再往下走了。。。。。不信你自已用sdk源码调试一下。sdk有关这一块的源码点这里
引用:harlan 发表于 2022-11-08 11:49
[DEBUG] net.x52im.mobileimsdk.server.ServerCoreHandler.exceptionCaught[154 line] - 此客户端的Chann ...

对照一下看看原版的demo是什么表现。另外,你log要贴就贴的全一点,这么眼屎大一点信息,能看到啥啊,字多又不怕费电,我用电脑呢
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部