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