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