引用:harlan 发表于 2022-11-08 11:49 对照一下看看原版的demo是什么表现。另外,你log要贴就贴的全一点,这么眼屎大一点信息,能看到啥啊,字多又不怕费电,我用电脑呢 |
引用:JackJiang 发表于 2022-11-07 10:52 [DEBUG] net.x52im.mobileimsdk.server.ServerCoreHandler.exceptionCaught[154 line] - [IMCORE-udp]此客户端的Channel抛出了exceptionCaught,原因是:null,可以提前close掉了哦! io.netty.handler.timeout.ReadTimeoutException: null 这是什么情况,连上了报错后重连就没有问题了 |
引用:harlan 发表于 2022-11-04 11:35 这是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有关这一块的源码点这里。 |
引用:JackJiang 发表于 2022-11-04 22:02 @Override public boolean onTransferMessage4C2CBefore(Protocal p, Channel session) { log.info("【C2C_BEFORE】之前:{}", JSON.toJSONString(p)); if (p.getTypeu() == 1 || p.getTypeu() == 2){ String userId = OnlineProcessor.getUserIdFromChannel(session); if (!checkIsFriend(userId,p.getTo())){//不是好友 return false; } } return true; } 类似这种,在C2C之前验证 |
引用:JackJiang 发表于 2022-11-04 22:02 @Override public boolean onTransferMessage4C2CBefore(Protocal p, Channel session) { log.info("【C2C_BEFORE】之前:{}", JSON.toJSONString(p)); if (p.getTypeu() == 1 || p.getTypeu() == 2){ String userId = OnlineProcessor.getUserIdFromChannel(session); if (!checkIsFriend(userId,p.getTo())){//不是好友 return false; } } return true; } 类似这种,在C2C之前验证 |
引用:JackJiang 发表于 2022-11-04 22:02 @Override public boolean onTransferMessage4C2CBefore(Protocal p, Channel session) { log.info("【C2C_BEFORE】之前:{}", JSON.toJSONString(p)); if (p.getTypeu() == 1 || p.getTypeu() == 2){ String userId = OnlineProcessor.getUserIdFromChannel(session); if (!checkIsFriend(userId,p.getTo())){//不是好友 return false; } } return true; } 类似这种,在C2C之前验证 |
引用:JackJiang 发表于 2022-11-04 22:02 @Override public boolean onTransferMessage4C2CBefore(Protocal p, Channel session) { log.info("【C2C_BEFORE】之前:{}", JSON.toJSONString(p)); if (p.getTypeu() == 1 || p.getTypeu() == 2){ String userId = OnlineProcessor.getUserIdFromChannel(session); if (!checkIsFriend(userId,p.getTo())){//不是好友 return false; } } return true; } 类似这种,在C2C之前验证 |
看不到图,直接贴文本代码 |
引用:JackJiang 发表于 2022-11-04 16:44 |
引用:harlan 发表于 2022-11-04 16:30 把你的完整代码贴出来看看 |
引用:JackJiang 发表于 2022-11-04 11:35 我在onTransferMessage4C2CBefore,C2C发送之前验证消息,失败返回false之后,但是发送发客服端收到的还是消息发送成功,这种情况怎么处理 |
引用:harlan 发表于 2022-11-04 11:29 你把包搞小一点,试着找到长度边界。udp包长这个问题,没有个统一的硬性标准 |
我在onTransferMessage4C2CBefore,C2C发送之前验证消息,失败返回false之后,但是发送发客服端收到的还是消息发送成功,这种情况怎么处理 |
我在onTransferMessage4C2CBefore,C2C发送之前验证消息,失败返回false之后,但是发送发客服端收到的还是消息发送成功,这种情况怎么处理 |
引用:JackJiang 发表于 2022-11-04 11:18 我在onTransferMessage4C2CBefore,C2C发送之前验证消息,失败返回false之后,但是发送发客服端收到的还是消息发送成功,这种情况怎么处理 |
引用:JackJiang 发表于 2022-11-04 11:18 我在c2c发送之前验证消息onTransferMessage4C2CBefore,消息验证失败返回false之后,客服端的返回值还是认为消息发成功了。这种情况怎么处理 |
引用:JackJiang 发表于 2022-11-04 11:18 我不解的是客服端到我服务端这儿都是正常的,服务器这边是可以看到消息的,发给接收方就不行了 |
引用:harlan 发表于 2022-11-04 10:55 这样的长度,真有可能会超长。既然加密加要求高,你什么钟爱udp? |
引用:JackJiang 发表于 2022-11-03 18:37 1060个字节 |
引用:harlan 发表于 2022-11-03 15:56 你加密后的完整Protocal协议包,大约有多少字节? |