1. 程式人生 > >java 高效能網路程式設計 mina

java 高效能網路程式設計 mina

伺服器端:
    

// 建立一個非阻塞的server端socket ,用NIO
		SocketAcceptor acceptor = new NioSocketAcceptor();

		// 建立接收資料的過濾器
		DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();

		// 設定這個過濾器一行一行(\r\n)的讀資料
		chain.addLast("myChin", new ProtocolCodecFilter(
				new TextLineCodecFactory()));

		//設定伺服器端的訊息處理器,一個SamplMinaServerHandler物件(自己實現)繼承IoHandlerAdapter
		acceptor.setHandler(new IoHandlerAdapter(){
			//當一個客端端連結進入時
			@Override
			public void sessionOpened(IoSession session) throws Exception {
				// TODO Auto-generated method stub
				System.out.println("incomming client : "+session.getRemoteAddress());
			}
			
			//當一個客戶端關閉時
			@Override
			public void sessionClosed(IoSession session) throws Exception {
				// TODO Auto-generated method stub
				System.out.println("on client disconnect : "+session.getRemoteAddress());
			}

			//當客戶端傳送的訊息到達時
			@Override
			public void messageReceived(IoSession session, Object message)
					throws Exception {
				// TODO Auto-generated method stub
				String s =  (String)message;
				System.out.println("收到客戶端發來的訊息:"+s);
				//測試將訊息回給客戶端
				session.write(s+count);
				count ++;
			}
			private int count =0;
		});
		//埠號
		int bindPort= 9988;
		
		//繫結開啟,啟動伺服器
		acceptor.bind(new InetSocketAddress(bindPort));
		
		System.out.println("Mina Server is listing on:="+bindPort);

  
   
   
  客戶端:
   

// create TCP/IP connector
		NioSocketConnector connector = new NioSocketConnector();

		// 建立接收資料的過濾器
		DefaultIoFilterChainBuilder chain = connector.getFilterChain();

		// 設定這個過濾器將一行一行(/r/n)的讀取資料
		chain.addLast("myChin", new ProtocolCodecFilter(
				new TextLineCodecFactory()));

		// 設定伺服器端的訊息處理器:一個SamplMinaServerHandler物件,
		connector.setHandler(new IoHandlerAdapter(){
			@Override
			public void messageReceived(IoSession session, Object message)
					throws Exception {
				// 我們己設定了伺服器解析訊息的規則是一行一行讀取,這裡就可轉為String:
				String s = (String) message;
				// Write the received data back to remote peer
				System.out.println("伺服器發來的收到訊息: " + s);
				// 測試將訊息回送給客戶端
				session.write(s);
			}

			@Override
			public void sessionClosed(IoSession session) throws Exception {
				// TODO Auto-generated method stub
				System.out.println("one Clinet Disconnect !");
			}

			@Override
			public void sessionOpened(IoSession session) throws Exception {
				// TODO Auto-generated method stub
				System.out.println("incomming client  " + session.getRemoteAddress());
				session.write("我來啦........");
			}
		});
		
		// Set connect timeout.
		connector.setConnectTimeout(30);
		
		// 連結到伺服器:
		ConnectFuture cf = connector.connect(new InetSocketAddress("localhost",
				9988));
		
		// Wait for the connection attempt to be finished.
		cf.awaitUninterruptibly();
		cf.getSession().getCloseFuture().awaitUninterruptibly();
		connector.dispose();