日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

java传送字符到前端_mina实现服务器与客户端传送对象或字符串

發布時間:2024/9/19 HTML 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java传送字符到前端_mina实现服务器与客户端传送对象或字符串 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

NIO是Java New IO的簡稱,在JDK1.4版本中引入該API,從那時起,就被廣泛的應用。通過使用她,可以通過非阻塞的方式進行IO操作。

具體當你需要比較多的并發,而且并發的需要做長連接時,傳統的連續池可能會滿足不了你的需求,必竟如果連接池維護過多的連接 時,對于虛擬機的要求比較高,但如果過少連接的話,阻塞的線程會讓程序處理的非常慢,這時,你就可以考慮一下使用NIO框架MINA。

服務端代碼:

package cn.mina;

import java.io.IOException;

import java.net.InetSocketAddress;

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;

import org.apache.mina.filter.codec.ProtocolCodecFilter;

import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;

import org.apache.mina.transport.socket.SocketAcceptor;

import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

/**

* @author html580

* @site http://www.html580.com

*/

public class MainServer {

// 設置端口

public static int PORT = 8991;

/**

* @param args

* @throws IOException

* @author html580

*/

public static void main(String<> args) throws IOException {

System.out.println("服務創建中");

// 創建一個非阻塞的的server端socket,用NIO

SocketAcceptor acceptor = new NioSocketAcceptor();

// 創建接收數據的過濾器

DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();

/*

* 這里注意點: 1:TextLineCodecFactory設置這個過濾器一行一行(/r/n)的讀取數據

* 2.ObjectSerializationCodecFactory一般接收的是對象等形象,以對象形式讀取

*/

// chain.addLast("chain", new ProtocolCodecFilter(new

// TextLineCodecFactory()));

chain.addLast("chain", new ProtocolCodecFilter(

new ObjectSerializationCodecFactory()));

// 設定服務器端消息處理器.:就是我們創建的TimeServerHandler對象

acceptor.setHandler(new MinaServerHandler());

acceptor.bind(new InetSocketAddress(PORT));

System.out.println("MINS 服務器監聽的服務端口為" + PORT);

}

}類似于客戶端,用于處理客戶端請求的類為MinaServerHandlerpackage cn.mina;

import org.apache.mina.core.service.IoHandlerAdapter;

import org.apache.mina.core.session.IdleStatus;

import org.apache.mina.core.session.IoSession;

/**

* @author html580

* @site http://www.html580.com

*/

public class MinaServerHandler extends IoHandlerAdapter {

/****

* session打開時,調用

*/

@Override

public void sessionOpened(IoSession session) throws Exception {

System.out.println("服務端sessionOpened..." + session.getRemoteAddress());

}

/***

* 連接關才時調用

*/

@Override

public void sessionClosed(IoSession session) throws Exception {

System.out.println("服務端sessionClosed...........");

}

/**

* 如果出異常,就關閉session

*/

@Override

public void exceptionCaught(IoSession session, Throwable cause)

throws Exception {

cause.printStackTrace();

session.close(true);

}

/**

* 收到客戶端信息時調用

*/

@Override

public void messageReceived(IoSession session, Object message)

throws Exception {

System.out.println("服務端收信息...");

Message msg = (Message) message;

System.out.println("服務端->收到客戶機發來的消息: " + msg.getMsgBody());

msg.setMsgBody("服務端回應客戶機發來的消息" + msg.getMsgBody());

session.write(msg);

System.out.println("服務端回寫信息...");

}

/***

* 空閑時調用

*/

@Override

public void sessionIdle(IoSession session, IdleStatus status)

throws Exception {

System.out.println("服務端 sessionIdle " + session.getIdleCount(status));

}

}客戶端代碼

package cn.mina;

import java.io.IOException;

import java.net.InetSocketAddress;

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;

import org.apache.mina.core.future.ConnectFuture;

import org.apache.mina.filter.codec.ProtocolCodecFilter;

import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;

import org.apache.mina.transport.socket.nio.NioSocketConnector;

/**

* @author html580

* @site http://www.html580.com

*/

public class MinaClient {

private static int PORT = 8991;

/**

* @param args

* @throws IOException

*/

public static void main(String<> args) throws IOException {

System.out.println("開始接服務器");

// 創建TCP/IP的連接

NioSocketConnector connector = new NioSocketConnector();

// 創建接收數據的過濾器

DefaultIoFilterChainBuilder chain = connector.getFilterChain();

/*

* 這里注意點:

* 1:TextLineCodecFactory設置這個過濾器一行一行(/r/n)的發送/讀取數據

* 2.ObjectSerializationCodecFactory一般發送/接收的是對象等形象,以對象形式讀取

*/

//chain.addLast("myChain",new ProtocolCodecFilter(new TextLineCodecFactory()));

chain.addLast("myChain", new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));

Message msg = new Message("TObject");

// 設置處理的類

connector.setHandler(new MinaClientHandler(msg));

// 設置時間

connector.setConnectTimeoutMillis(300000);

// 開始連接服務器

ConnectFuture cf = connector.connect(new InetSocketAddress("localhost",PORT));

// 等待連接結束

cf.awaitUninterruptibly();

cf.getSession().getCloseFuture().awaitUninterruptibly();

connector.dispose();

}

}客戶端用MinaClientHandler來處理發送的信息,MinaClientHandler類必須繼承IoHandlerAdapter,類似于Struts中處理action的類必須繼承Actionpackage cn.mina;

import org.apache.mina.core.service.IoHandlerAdapter;

import org.apache.mina.core.session.IoSession;

/**

* @author html580

* @site http://www.html580.com

*/

public class MinaClientHandler extends IoHandlerAdapter {

public MinaClientHandler() {

}

private Object msg;

public MinaClientHandler(Object message) {

this.msg = message;

}

@Override

public void sessionOpened(IoSession session) throws Exception {

System.out.println("客戶端->sessionOpened");

System.out.println("客戶端->" + ((Message) msg).getMsgBody());

session.write(msg);

}

@Override

public void sessionClosed(IoSession arg0) throws Exception {

System.out.println("客戶端->sessionClosed");

}

@Override

public void messageReceived(IoSession session, Object message)

throws Exception {

Message msg = (Message) message;

System.out.println("處理完的結果為" + msg.getMsgBody());

}

@Override

public void messageSent(IoSession session, Object message) throws Exception {

// session.write(strC);

// super.messageSent(session, message);

}

@Override

public void exceptionCaught(IoSession session, Throwable cause)

throws Exception {

cause.printStackTrace();

session.close(true);

}

}傳送對象類:

package cn.mina;

import java.io.Serializable;

/**

* @author html580

* @site http://www.html580.com

*/

public class Message implements Serializable{

private static final long serialVersionUID = 1L;

private String msgBody;

public Message(String msgBody) {

this.msgBody = msgBody;

}

public String getMsgBody() {

return msgBody;

}

public void setMsgBody(String msgBody) {

this.msgBody = msgBody;

}

}測試結果如下:

啟動服務端:

服務創建中

MINS 服務器監聽的服務端口為8991

啟動客戶端:

開始接服務器

客戶端->sessionOpened

客戶端->http://www.html580.com

處理完的結果為服務端回應客戶機發來的消息http://www.html580.com

服務端一直監控輸出:

服務端sessionOpened.../127.0.0.1:61837

服務端收信息...

服務端->收到客戶機發來的消息: http://www.html580.com

服務端回寫信息...

總結

以上是生活随笔為你收集整理的java传送字符到前端_mina实现服务器与客户端传送对象或字符串的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。