hi all.

 

  I writed a simple socket server via mina. Writed a Flex client. I want flex 
client to connect the server. but some questions block me . I need help. Please 
help me .Thank you very much.

 

I try to write a client via mina. I found server and client work fine.

 

Question 1 : I run Main, Server created, I run Flex code, I find it can success 
connect to Mina.But server do not retrieve message when send a message via Flex.

 

Question 2 : Remove " DefaultIoFilterChainBuilder chain = 
acceptor.getFilterChain();" and "chain.addLast("codec", new 
ProtocolCodecFilter(new TextLineCodecFactory()));", Run Main. Run Flex, I try 
to send message , It seems MINA retrieve the message. But exception print when 
send message to flex via mina. 

 

Please help me. I do not know how to fix it, THanks again

 

Exception below.


SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in 
[jar:file:/E:/mp3/slf4j-1.5.8/slf4j-1.5.8/slf4j-jdk14-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in 
[jar:file:/E:/mp3/slf4j-1.5.8/slf4j-1.5.8/slf4j-log4j12-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in 
[jar:file:/E:/mp3/slf4j-1.5.8/slf4j-1.5.8/slf4j-nop-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in 
[jar:file:/E:/mp3/slf4j-1.5.8/slf4j-1.5.8/slf4j-jcl-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
Listening on port 1234
------------------------sessionCreated: 
------------------------received: HeapBuffer[pos=0 lim=12 cap=2048: 46 6C 65 78 
20 6D 65 73 73 61 67 65]2009-7-23 8:24:55 test.ServerChatProtocolHandler 
messageReceived
信息: received: HeapBuffer[pos=0 lim=12 cap=2048: 46 6C 65 78 20 6D 65 73 73 61 
67 65]

Send go away
2009-7-23 8:24:55 test.ServerChatProtocolHandler exceptionCaught
警告: Unexpected exception.
java.lang.IllegalStateException: Don't know how to handle message of type 
'java.lang.String'.  Are you missing a protocol encoder?
 at 
org.apache.mina.core.polling.AbstractPollingIoProcessor.flushNow(AbstractPollingIoProcessor.java:738)
 at 
org.apache.mina.core.polling.AbstractPollingIoProcessor.flush(AbstractPollingIoProcessor.java:648)
 at 
org.apache.mina.core.polling.AbstractPollingIoProcessor.access$500(AbstractPollingIoProcessor.java:56)
 at 
org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:895)
 at 
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
 at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
 at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
 at java.lang.Thread.run(Thread.java:619)


===========================================================================

Below are java code.

 

 

 
package test;

import java.net.InetSocketAddress;

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.example.echoserver.ssl.BogusSslContextFactory;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.filter.logging.MdcInjectionFilter;
import org.apache.mina.filter.ssl.SslFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

 
public class Main {
        private static final int PORT = 1234;

    

    public static void main(String[] args) throws Exception {
        NioSocketAcceptor acceptor = new NioSocketAcceptor();

        DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
        chain.addLast("codec", new ProtocolCodecFilter(new 
TextLineCodecFactory()));
        acceptor.setHandler(new ServerChatProtocolHandler());
        acceptor.bind(new InetSocketAddress(PORT));
        System.out.println("Listening on port " + PORT);
    }

}

 

package test;

import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.CharsetDecoder;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.logging.MdcInjectionFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

 public class ServerChatProtocolHandler extends IoHandlerAdapter {
    private final static Logger LOGGER = 
LoggerFactory.getLogger(ServerChatProtocolHandler.class);

     @Override
    public void exceptionCaught(IoSession session, Throwable cause) {
        LOGGER.warn("Unexpected exception.", cause);
         session.close(true);
    }
   

    @Override
    public void sessionCreated(IoSession session) {
     System.out.println("------------------------sessionCreated: ");
 
    }
  

    @Override
    public void messageReceived(IoSession session, Object message) {
        Logger log = LoggerFactory.getLogger(ServerChatProtocolHandler.class);
        log.info("received: " + message);
        System.out.println("------------------------received: " + message);
        session.write("go away!!!");
        System.out.println("Send go away");
    }

}

 

Flex as3 codes

 

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"; 
 xmlns:s="library://ns.adobe.com/flex/spark" 
 xmlns:mx="library://ns.adobe.com/flex/halo" minWidth="1024" minHeight="768"
  creationComplete="init()">
 <s:Button x="10" y="9" label="Connect" width="126" click="connect()"/>
 <s:TextArea id="txtlog" x="12" y="38" width="610" height="560"/>
 <s:TextInput x="140" y="8" id="txt_message" width="300"/>
 <s:Button x="447" y="9" label="Send" click="sendMessage()" width="99"/>
 <s:Button x="552" y="9" label="Disconnect" click="disconnect()"/>
<fx:Script>
 <![CDATA[
  

import flash.events.ProgressEvent;
import flash.net.Socket;
import flash.events.Event;

  private var socket:Socket;
  
  private function init():void{
   socket = new Socket();
   socket.addEventListener(Event.CONNECT,startConnect);
   socket.addEventListener(IOErrorEvent.IO_ERROR,ioerror);
   socket.addEventListener(ProgressEvent.SOCKET_DATA,socketDATA);
   socket.addEventListener(Event.CLOSE,socketclose);
  }
  
  private function connect():void{
   socket.connect("127.0.0.1",1234);
   txtlog.text = txtlog.text+"Start connect 127.0.0.1:1234"+"\n";
  }

  private function socketclose(event:Event):void{
   txtlog.text = txtlog.text+"socket closed"+"\n";
  }
  
  private function startConnect(event:Event):void{
   txtlog.text = txtlog.text+"socket connect"+"\n";
  }

  private function ioerror(event:IOErrorEvent):void{
   txtlog.text = txtlog.text+"socket error:"+event.text+"\n";
  }
    
  private function socketDATA(event:ProgressEvent):void{
   
   txtlog.text = txtlog.text+"get socket message:"+socket.readUTF()+"\n";
  }
    
  private function sendMessage():void{
   this.socket.writeMultiByte(txt_message.text,"UTF-8");
   this.socket.flush();
   txt_message.text = "";
   
  }
  
  private function disconnect():void{
   this.socket.close();
  } 

  ]]>
</fx:Script> 
</s:Application>




_________________________________________________________________
张三挖到了元宝,小美又掉进陷阱了,快来MClub与好友齐乐乐!立刻访问!
http://club.msn.cn/?from=3

Reply via email to