Hi Qi,
Such a small object should be fine I guess. Could you provide us full
source code so we can test?
Trustin
On Dec 13, 2007 4:55 PM, Qi <[EMAIL PROTECTED]> wrote:
>
> Hi Trustin,
>
> Thank you for the quick reply.
>
> The Object was actually quite small, I've also tried with a "new
> Integer(123)" but the same exception would still happen.
>
> Is there any workarounds that can re-organize UDP packets received with
> MINA? I've done a search in the forum, and found there isn't many posts
> about broadcasting. Do you have any examples about sending datagram using
> MINA at hand that I can have a look?
>
> Very much appreciated,
> Qi
>
>
>
>
>
> Trustin Lee wrote:
> >
> > I think your message doesn't fit into one UDP packet, which mean your
> > message is truncated. It can always happen in UDP if you are sending
> > a relatively big object.
> >
> > HTH,
> > Trustin
> >
> > On Dec 13, 2007 4:37 PM, Qi <[EMAIL PROTECTED]> wrote:
> >>
> >> Hi there,
> >>
> >> I was writing some prototype codes that uses MINA to broadcast some
> >> message
> >> in a heterogeneous network.
> >> For simplicity and fast development time, I used
> >> ObjectSerializationEncoder/Decoder.
> >> Somehow, a exception was occurred when sending messages(serializable
> >> object)
> >> between a windows machine and a linux machine. (detailed exception stack
> >> trace is attached at the end of this post.)
> >> Messages sent from windows to windows boxes are fine.
> >> Plain strings between windows and Linux also been received normally.
> >> I just wonder if anyone has met this problem before?
> >>
> >> Thanks in advance,
> >> Qi
> >> 13 Dec. 2007
> >>
> >> The windows machine has windows XP SP2 (32bit), JRE 1.6.0 installed.
> >> The Linux machine has fedora 5 (Linux version 2.6.20-1.2320.fc5) and JRE
> >> 1.6.0.
> >>
> >> Here's the full stack trace:
> >> ExpiringMapExpirer-1 [INFO ] [/192.168.1.100:3207] CLOSE -
> >> mina.BroadcastReceiver$1
> >> ExpiringMapExpirer-1 [INFO ] [/192.168.1.100:3207] CLOSED -
> >> mina.BroadcastReceiver$1
> >> session closed
> >> DatagramAcceptor-0 [INFO ] [/192.168.1.21:33435] CREATED -
> >> mina.BroadcastReceiver$1
> >> session created
> >> DatagramAcceptor-0 [INFO ] [/192.168.1.21:33435] OPENED -
> >> mina.BroadcastReceiver$1
> >> DatagramAcceptor-0 [INFO ] [/192.168.1.21:33435] RECEIVED:
> >> HeapBuffer[pos=0
> >> lim=106 cap=128: 00 00 00 66 AC ED 00 05 73 72 00 27 62 6F 6F 2E 63 6F 6D
> >> 6D
> >> 6F 6E 73 2E 63 61 63 68 65 2E 65 76 65 6E 74 2E 4D 6F 63 6B 59 6F 6F 62
> >> 65
> >> 72 45 76 65 6E 74 78 72 00 2B 62 6F 6F 2E 63 6F 6D 6D 6F 6E 73 2E 63 61
> >> 63
> >> 68 65 2E 65 76 65 6E 74 2E 41 62 73 74 72 61 63 74 59 6F 6F 62 65 72 45
> >> 76
> >> 65 6E 74 78 70 74 00 03 31 32 33] - mina.BroadcastReceiver$1
> >> DatagramAcceptor-0 [WARN ] [/192.168.1.21:33435] EXCEPTION: -
> >> mina.BroadcastReceiver$1
> >> org.apache.mina.filter.codec.ProtocolDecoderException:
> >> org.apache.mina.common.BufferDataException: java.io.EOFException
> >> (Hexdump:
> >> empty)
> >> at
> >> org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:164)
> >> at
> >> org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:299)
> >> at
> >> org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53)
> >> at
> >> org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:648)
> >> at
> >> org.apache.mina.filter.LoggingFilter.messageReceived(LoggingFilter.java:89)
> >> at
> >> org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:299)
> >> at
> >> org.apache.mina.common.support.AbstractIoFilterChain.access$1100(AbstractIoFilterChain.java:53)
> >> at
> >> org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:648)
> >> at
> >> org.apache.mina.common.support.AbstractIoFilterChain$HeadFilter.messageReceived(AbstractIoFilterChain.java:499)
> >> at
> >> org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:299)
> >> at
> >> org.apache.mina.common.support.AbstractIoFilterChain.fireMessageReceived(AbstractIoFilterChain.java:293)
> >> at
> >> org.apache.mina.transport.socket.nio.support.DatagramAcceptorDelegate.readSession(DatagramAcceptorDelegate.java:400)
> >> at
> >> org.apache.mina.transport.socket.nio.support.DatagramAcceptorDelegate.processReadySessions(DatagramAcceptorDelegate.java:368)
> >> at
> >> org.apache.mina.transport.socket.nio.support.DatagramAcceptorDelegate.access$1200(DatagramAcceptorDelegate.java:61)
> >> at
> >> org.apache.mina.transport.socket.nio.support.DatagramAcceptorDelegate$Worker.run(DatagramAcceptorDelegate.java:320)
> >> at
> >> org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
> >> at java.lang.Thread.run(Unknown Source)
> >> Caused by: org.apache.mina.common.BufferDataException:
> >> java.io.EOFException
> >> at
> >> org.apache.mina.common.ByteBuffer.getObject(ByteBuffer.java:1530)
> >> at
> >> org.apache.mina.filter.codec.serialization.ObjectSerializationDecoder.doDecode(ObjectSerializationDecoder.java:92)
> >> at
> >> org.apache.mina.filter.codec.CumulativeProtocolDecoder.decode(CumulativeProtocolDecoder.java:133)
> >> at
> >> org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:157)
> >> ... 16 more
> >> Caused by: java.io.EOFException
> >> at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown
> >> Source)
> >> at
> >> java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(Unknown
> >> Source)
> >> at java.io.ObjectInputStream$BlockDataInputStream.readUTF(Unknown
> >> Source)
> >> at java.io.ObjectInputStream.readUTF(Unknown Source)
> >> at java.io.ObjectStreamClass.readNonProxy(Unknown Source)
> >> at java.io.ObjectInputStream.readClassDescriptor(Unknown Source)
> >> at
> >> org.apache.mina.common.ByteBuffer$3.readClassDescriptor(ByteBuffer.java:1516)
> >> at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
> >> at java.io.ObjectInputStream.readClassDesc(Unknown Source)
> >> at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
> >> at java.io.ObjectInputStream.readObject0(Unknown Source)
> >> at java.io.ObjectInputStream.readObject(Unknown Source)
> >> at
> >> org.apache.mina.common.ByteBuffer.getObject(ByteBuffer.java:1528)
> >> ... 19 more
> >> Exception caught
> >> ExpiringMapExpirer-1 [INFO ] [/192.168.1.21:33435] CLOSE -
> >> mina.BroadcastReceiver$1
> >> ExpiringMapExpirer-1 [INFO ] [/192.168.1.21:33435] CLOSED -
> >> mina.BroadcastReceiver$1
> >> session closed
> >>
> >> /****************************************
> >> The acceptor code:
> >> BroadcastReceiver.java
> >> *******************************************/
> >> package mina;
> >>
> >> import java.io.IOException;
> >> import java.net.InetSocketAddress;
> >>
> >> import org.apache.mina.common.ByteBuffer;
> >> import org.apache.mina.common.IoHandlerAdapter;
> >> import org.apache.mina.common.IoSession;
> >> import org.apache.mina.common.PooledByteBufferAllocator;
> >> import org.apache.mina.common.SimpleByteBufferAllocator;
> >> import org.apache.mina.common.ThreadModel;
> >> import org.apache.mina.filter.LoggingFilter;
> >> import org.apache.mina.filter.codec.ProtocolCodecFilter;
> >> import
> >> org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
> >> import org.apache.mina.transport.socket.nio.DatagramAcceptor;
> >> import org.apache.mina.transport.socket.nio.DatagramAcceptorConfig;
> >>
> >>
> >> public class BroadcastReceiver {
> >> public static void main(String[] args) throws IOException {
> >> ByteBuffer.setUseDirectBuffers(false);
> >> ByteBuffer.setAllocator(new SimpleByteBufferAllocator());
> >> DatagramAcceptor receiver = new DatagramAcceptor();
> >> DatagramAcceptorConfig config = new
> >> DatagramAcceptorConfig();
> >> config.setThreadModel(ThreadModel.MANUAL);
> >> config.getSessionConfig().setBroadcast(true);
> >> config.getSessionConfig().setReuseAddress(true);
> >> config.getFilterChain().addLast("log", new
> >> LoggingFilter());
> >> ObjectSerializationCodecFactory oscf = new
> >> ObjectSerializationCodecFactory();
> >> oscf.setDecoderMaxObjectSize(1048576);
> >> config.getFilterChain().addLast("codec",
> >> new ProtocolCodecFilter(oscf));
> >> receiver.bind(new InetSocketAddress(7500), new
> >> IoHandlerAdapter() {
> >>
> >> @Override
> >> public void exceptionCaught(IoSession session,
> >> Throwable cause)
> >> throws Exception {
> >> System.out.println("Exception caught");
> >> cause.printStackTrace();
> >> }
> >>
> >> @Override
> >> public void messageReceived(IoSession session,
> >> Object message)
> >> throws Exception {
> >> System.out.println("message received:" +
> >> message.toString());
> >> }
> >>
> >> @Override
> >> public void sessionClosed(IoSession session)
> >> throws Exception {
> >> System.out.println("session closed");
> >> }
> >>
> >> @Override
> >> public void sessionCreated(IoSession session)
> >> throws Exception {
> >> System.out.println("session created");
> >> }
> >> }, config);
> >> }
> >> }
> >>
> >>
> >> /*******************************************
> >> *The connector side code:
> >> BroadcastSender.java
> >> *******************************************/
> >> package mina;
> >>
> >> import java.net.InetSocketAddress;
> >>
> >> import org.apache.mina.common.ByteBuffer;
> >> import org.apache.mina.common.ConnectFuture;
> >> import org.apache.mina.common.IoHandlerAdapter;
> >> import org.apache.mina.common.IoSession;
> >> import org.apache.mina.common.PooledByteBufferAllocator;
> >> import org.apache.mina.common.ThreadModel;
> >> import org.apache.mina.common.WriteFuture;
> >> import org.apache.mina.filter.LoggingFilter;
> >> import org.apache.mina.filter.codec.ProtocolCodecFilter;
> >> import
> >> org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
> >> import org.apache.mina.transport.socket.nio.DatagramConnector;
> >> import org.apache.mina.transport.socket.nio.DatagramConnectorConfig;
> >>
> >> public class BroadcastSender {
> >> public static void main(String[] args) {
> >> ByteBuffer.setUseDirectBuffers(false);
> >> ByteBuffer.setAllocator(new PooledByteBufferAllocator());
> >> DatagramConnector sender = new DatagramConnector();
> >> DatagramConnectorConfig config = new DatagramConnectorConfig();
> >> config.getFilterChain().addFirst("log", new LoggingFilter());
> >> config.getFilterChain().addFirst("codec",
> >> new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
> >> config.getSessionConfig().setBroadcast(true);
> >> config.setConnectTimeout(2);
> >>
> >> config.setThreadModel(ThreadModel.MANUAL);
> >> config.getSessionConfig().setReuseAddress(true);
> >> ConnectFuture cf = sender.connect(new
> >> InetSocketAddress("192.168.1.255",
> >> 7500),
> >> new IoHandlerAdapter() {
> >>
> >> @Override
> >> public void exceptionCaught(IoSession session, Throwable cause)
> >> throws Exception {
> >> cause.printStackTrace();
> >> System.out.println("exceptionCaught");
> >> }
> >>
> >> @Override
> >> public void messageSent(IoSession session, Object message)
> >> throws
> >> Exception {
> >> System.out.println("messageSent");
> >> }
> >>
> >> @Override
> >> public void sessionClosed(IoSession session) throws Exception {
> >> System.out.println("sessionClosed");
> >> }
> >>
> >> @Override
> >> public void sessionCreated(IoSession session) throws Exception
> >> {
> >> System.out.println("sessionCreated");
> >> }
> >>
> >> @Override
> >> public void sessionOpened(IoSession session) throws Exception {
> >> System.out.println("sessionOpened");
> >> }
> >>
> >> }, config);
> >> cf.join();
> >> if (cf.isConnected()) {
> >> IoSession session = cf.getSession();
> >> WriteFuture wf = session.write(new MockEvent("123"));
> >> wf.join();
> >> session.close();
> >> session.getCloseFuture().join();
> >> }
> >> }
> >> }
> >>
> >> /*************************
> >> MockEvent.java
> >> ************************/
> >> package mina;
> >>
> >> public class MockEvent implements Serializable {
> >> private static final long serialVersionUID = -147055975212279720L;
> >>
> >> private String message;
> >>
> >> public MockEvent (String message) {
> >> this.message = message;
> >> }
> >> public String toString() {
> >> return message;
> >> }
> >> }
> >>
> >>
> >>
> >>
> >> --
> >> View this message in context:
> >> http://www.nabble.com/Problem-when-use-ObjectSerializationCodecFactory-in-Datagram-broadcasting-between-linux-and-window-tp14311279s16868p14311279.html
> >> Sent from the Apache MINA Support Forum mailing list archive at
> >> Nabble.com.
> >>
> >>
> >
> >
> >
> > --
> > what we call human nature is actually human habit
> > --
> > http://gleamynode.net/
> > --
> > PGP Key ID: 0x0255ECA6
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/Problem-when-use-ObjectSerializationCodecFactory-in-Datagram-broadcasting-between-linux-and-window-tp14311279s16868p14311480.html
>
> Sent from the Apache MINA Support Forum mailing list archive at Nabble.com.
>
>
--
what we call human nature is actually human habit
--
http://gleamynode.net/
--
PGP Key ID: 0x0255ECA6