Verwendung des MINA Frameworks

Von: https://www.cnblogs.com/yanxiaoge/p/10744454.html

1. Herunterladen

1
http: //mina.apache.org/

2. Fügen Sie dem Projektverzeichnis abhängige Pakete hinzu (erstellen Sie libs (Verzeichnisverzeichnis) unter dem Projektverzeichnis).

3. Fügen Sie dem libs-Verzeichnis die abhängigen Pakete slf4j-api-1.7.26.jar und mina-core-2.0.21.jar hinzu

4. Um die beiden Dateien an das Projekt zu binden, gehen Sie wie folgt vor: Wählen Sie die beiden Dateien aus, klicken Sie mit der rechten Maustaste und wählen Sie Als Bibliothek hinzufügen

 

Code-Implementierung

 Server

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
fünfzehn
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
 
import java.io.*;
import java.net.InetSocketAddress;
 
public  class  Server{
     public  static  void  main(String[] args) {
         //创建一个非堵塞的Server(Socker),[NIO模式]
         SocketAcceptor acceptor =  new  NioSocketAcceptor();
         //创建一个过滤器对象
         DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
 
         //设定一个过滤器,一行一行的读取数据(/r/n)
         //chain.addLast("myChain",new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));//表示传数据的数据是一个对象;
         chain.addLast( "myChain" , new  ProtocolCodecFilter( new  TextLineCodecFactory()));
         //设置服务器的消息处理器
         acceptor.setHandler( new  MinaServerHandle());
         int  port = 8080;  //服务器的端口号
         try  {
             //绑定端口,并且启动服务器,立刻返回,不会堵塞
             acceptor.bind( new  InetSocketAddress(port));
 
         catch  (IOException e) {
             e.printStackTrace();
         }
         System. out .println( "MINA服务器已经开启,端口号:" +port);
     }
}
 
//服务器端的消息处理器
class  MinaServerHandle extends IoHandlerAdapter {
     //会话开始
     @Override
     public  void  sessionOpened(IoSession session) throws Exception {
         super.sessionOpened(session);
         System. out .println(session.getRemoteAddress()+ "已连接" ); //获取客户端连接的ip地址
     }
     //会话结束
     @Override
     public  void  sessionClosed(IoSession session) throws Exception {
         System. out .println( "会话结束" );
     }
 
     //接受消息
     @Override
     public  void  messageReceived(IoSession session, Object message) throws Exception {
         super.messageReceived(session, message);
         System. out .println(message);  //接受消息
         session.write( "hellow" );
     }
}

 

  

 

Kunde 1

1. Sie können das mit dem Fenster gelieferte Telnet-Tool verwenden, um eine Verbindung zum Server herzustellen und zu kommunizieren

Öffnen Sie zuerst Telnet, öffnen Sie in der Systemsteuerung Programme und Funktionen, wählen Sie unter Öffnen (Öffnen oder Schließen der Windows-Funktion) den Telnet-Client aus, OK

Test: Geben Sie dann Telnet localhost (Server-IP-Adresse) 8080 (Server-Port) auf der Konsole ein

Client 2

2. Schreiben Sie Ihr eigenes Client-Programm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
 
import java.net.InetSocketAddress;
import java.util.Scanner;
 
public  class  client {
     public  static  void  main(String[] args) {
         NioSocketConnector conn =  new  NioSocketConnector();
         DefaultIoFilterChainBuilder chain = conn.getFilterChain();
         chain.addLast( "myChain" , new  ProtocolCodecFilter( new  TextLineCodecFactory()));
         conn.setHandler( new  MinaClientHandle());
         conn.setConnectTimeoutCheckInterval(3000);
 
         //连接服务器
         ConnectFuture cf = conn.connect( new  InetSocketAddress( "localhost" , 8080));
         cf.awaitUninterruptibly();  //等待连接成功;
         Scanner input =  new  Scanner(System. in );
         while  ( true ){
             System. out .println( "输入消息" );
             String msg = input.nextLine();
             cf.getSession().write(msg);
         }
         //等待服务器关闭连接
         //cf.getSession().getCloseFuture().awaitUninterruptibly();
         //conn.dispose();
     }
}
class  MinaClientHandle extends IoHandlerAdapter {
     @Override
     public  void  sessionOpened(IoSession session) throws Exception {
         super.sessionOpened(session);
         System. out .println( "已连接" );
     }
     @Override
     public  void  sessionClosed(IoSession session) throws Exception {
         super.sessionClosed(session);
         System. out .println( "已关闭" );
     }
     @Override
     public  void  messageReceived(IoSession session, Object message) throws Exception {
         super.messageReceived(session, message);
         System. out .println( "服务器返回消息:" +message);
     }
}

  

Ich denke du magst

Origin www.cnblogs.com/sharpest/p/12702772.html
Empfohlen
Rangfolge