मैं नेटटी के साथ अपना पहला कदम बनाने की कोशिश कर रहा हूं, इस उद्देश्य के लिए मैंने ओटी सादे टीसीपी पर नेटटी और सरल क्लाइंट पर सरल सर्वर लिखा था।नेटटी चैनल। लिखना संदेश नहीं लिख रहा
ग्राहक यादृच्छिक पाठ पैकेट भेजता है, और उसे "एएके" संदेश प्राप्त करना होगा। हैंडलर विधि देखें:
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
ctx.write("Ack");
ctx.flush();
ByteBuf in = (ByteBuf) msg;
StringBuilder sb = new StringBuilder();
try {
while (in.isReadable()) {
sb.append((char) in.readByte());
}
} finally {
ReferenceCountUtil.release(msg);
}
LOG.debug("Incoming message. ACK was send");
String myaddr = ctx.channel().remoteAddress().toString();
String message = "Message from " + myaddr + " :" + sb.toString();
LOG.debug(message);
sendToOther(myaddr, message);
}
समस्या है - जब मैं "Ack" स्ट्रिंग वापस भेजने का प्रयास करें - ग्राहक कुछ भी नहीं प्राप्त करता है। लेकिन जब मैं आने वाले संदेश को वापस भेजने का प्रयास करता हूं - यह ठीक काम करता है, और मैं अपने क्लाइंट में गूंजता हूं।
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
ctx.write(msg);
ctx.flush();
लिखने() विधि को ऑब्जेक्ट की आवश्यकता है और मैंने (ऑब्जेक्ट) स्ट्रिंग भेजने की कोशिश की - लेकिन कुछ भी नहीं हुआ। मैंने बाइटबफ भेजने की भी कोशिश की (मैंने इसे एक लेख में देखा) और यह अभी भी काम नहीं कर रहा है।
जब मैं आने वाले संदेश को गूंज के रूप में वापस भेजता हूं - यह काम करता है। जब मैं कुछ और भेजता हूं - यह नहीं करता है। कृपया मेरी मदद करें, मैं सिर्फ यह नहीं समझ सकता कि मेरी गलती कहां है।
मैंने इस समस्या को हल किया। प्वाइंट था, कि आपको केवल बाइटबफ भेजने की जरूरत है। तो हमें इसे बनाने की ज़रूरत है, और इसे कुछ लिखना है और केवल तभी हम इसे चैनल पाइप में लिख सकते हैं। मेरे मामले में यह था:
String ack = "ACK";
ByteBuf out = ctx.alloc().buffer(ack.length()*2);
out.writeBytes(ack.getBytes());
ctx.write(out);
ctx.flush();
LOG.debug("Incoming message. ACK was send");
हो सकता है कि यह अत्यधिक संवेदना न हो, लेकिन यह उदाहरण के रूप में काम करता है।
Thanx:
ByteBuf
हालांकि काम करना चाहिए:ग्राहक के पक्ष संपादित करें पर channelRead विधि! आपका समाधान खुद को ढूंढने से बेहतर है। – Asprelis