怎样使用Java网络通讯框架Mina自定义消息格式( 四 )

import java.io.IOException;import java.net.InetSocketAddress;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.transport.socket.nio.NioSocketAcceptor;public class ImageServer {\tpublic static final int PORT = 33789;\tpublic static void main(String args) throws IOException {\t\tImageServerIoHandler handler = new ImageServerIoHandler();\t\tNioSocketAcceptor acceptor = new NioSocketAcceptor();\t\tacceptor.getFilterChain().addLast("protocol", new ProtocolCodecFilter(new ImageCodecFactory(false)));\t\tacceptor.setDefaultLocalAddress(new InetSocketAddress(PORT));\t\tacceptor.setHandler(handler);\t\tacceptor.bind();\t\tSystem.out.println("server is listenig at port " + PORT);\t}}import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IoSession;public class ImageServerIoHandler extends IoHandlerAdapter {\tprivate final static String characters = "mina rocksabcdefghijklmnopqrstuvwxyz0123456789";\tpublic static final String INDEX_KEY = ImageServerIoHandler.class.getName()\t\t\t+ ".INDEX";\tpublic void sessionOpened(IoSession session) throws Exception {\t\tsession.setAttribute(INDEX_KEY, 0);\t}\tpublic void exceptionCaught(IoSession session, Throwable cause)\t\t\tthrows Exception {\t}\tpublic void messageReceived(IoSession session, Object message)\t\t\tthrows Exception {\t\tImageRequest request = (ImageRequest) message;\t\tString text1 = generateString(session, request.getNumberOfCharacters());\t\tString text2 = generateString(session, request.getNumberOfCharacters());\t\tBufferedImage image1 = createImage(request, text1);\t\tBufferedImage image2 = createImage(request, text2);\t\tImageResponse response = new ImageResponse(image1, image2);\t\tsession.write(response);\t}\tprivate BufferedImage createImage(ImageRequest request, String text) {\t\tBufferedImage image = new BufferedImage(request.getWidth(), request\t\t\t\t.getHeight(), BufferedImage.TYPE_BYTE_INDEXED);\t\tGraphics graphics = image.createGraphics();\t\tgraphics.setColor(Color.YELLOW);\t\tgraphics.fillRect(0, 0, image.getWidth(), image.getHeight());\t\tFont serif = new Font("serif", Font.PLAIN, 30);\t\tgraphics.setFont(serif);\t\tgraphics.setColor(Color.BLUE);\t\tgraphics.drawString(text, 10, 50);\t\treturn image;\t}\tprivate String generateString(IoSession session, int length) {\t\tInteger index = (Integer) session.getAttribute(INDEX_KEY);\t\tStringBuffer buffer = new StringBuffer(length);\t\twhile (buffer.length() \u0026lt; length) {\t\t\tbuffer.append(characters.charAt(index));\t\t\tindex++;\t\t\tif (index \u0026gt;= characters.length()) {\t\t\t\tindex = 0;\t\t\t}\t\t}\t\tsession.setAttribute(INDEX_KEY, index);\t\treturn buffer.toString();\t}}server is listenig at port 33789doDecode@width=4|height=4|numer_of_characters=100encode@bytes1_length=854|bytes1_length=854连接成功encode@request_width=4|request_height=4request_|numer_of_characters=100readImage@length=854readImage@length=854onImages@image1.getHeight=4|image1.getWidth=4onImages@image2.getHeight=4|image2.getWidth=4


推荐阅读