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

Reply via email to