Telnet服务器开发

2018-07-24  本文已影响0人  Wpixel

子曰:“巧言令色,鲜矣仁!”

Telnet服务器代码
import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.InputStreamReader;  
import java.io.OutputStream;  
import java.net.ServerSocket;  
import java.net.Socket;  
import java.text.SimpleDateFormat;  
import java.util.Date;  
import java.util.concurrent.ExecutorService;  
import java.util.concurrent.Executors;  
  
public class HelloServer {  
  
    public static final int SERVER_PORT = 5555;  
    private ServerSocket serverSocket = null;  
    private ExecutorService executorService = null;  
    private final int POOL_SIZE = 2;  
      
    public HelloServer() throws Exception{  
        int cpuCount = Runtime.getRuntime().availableProcessors();  
        executorService = Executors.newFixedThreadPool(cpuCount * POOL_SIZE);  
        serverSocket = new ServerSocket(SERVER_PORT);  
        System.out.println("服务器已启动,监听中...");  
        while(true){  
            try{  
                Socket socket = serverSocket.accept();  
                executorService.execute(new HelloResponser(socket));  
            }catch(Exception e){  
                e.printStackTrace();  
            }  
        }  
    }  
      
    class HelloResponser implements Runnable{  
        private Socket socket = null;  
          
        public HelloResponser(Socket socket){  
            this.socket = socket;  
        }  
        
        @Override  
        public void run() {  
            try{  
                String clientIp = socket.getInetAddress().getHostAddress();  
                System.out.println("开始处理来在 " + clientIp + ":" + socket.getPort() + " 的请求\r\n");  
                InputStream socketInStream = socket.getInputStream();  
                BufferedReader br = new BufferedReader(new InputStreamReader(socketInStream, "UTF-8"));  
                OutputStream socketOutStream = socket.getOutputStream();  
                socketOutStream.write(("Shell>").getBytes("GBK"));  
                String clientRequestString = null;  
                while((clientRequestString = br.readLine()) != null){  
                    System.out.println("接收到客户端 " + clientIp + " 的信息:" + clientRequestString);  
                    String serverReturn = null;  
                    if(clientRequestString.equals("quit")){  
                        serverReturn = "断开连接.\r\n";  
                        System.out.println("发送给客户端" + clientIp + "应答信息:" + serverReturn);  
                        socketOutStream.write(serverReturn.getBytes("GBK"));  
                        System.out.println("结束来自 " + clientIp + ":" + socket.getPort() + " 的请求");  
                        break;  
                    }else{  
                        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");  
                        serverReturn = df.format(new Date()) + "\r\n";  
                        System.out.println("发送给客户端 " + clientIp + "应答信息:" + serverReturn);  
                        socketOutStream.write((serverReturn+"\r\nShell>").getBytes("GBK"));  
                    }  
                }  
            }catch(Exception e){  
                e.printStackTrace();  
            }finally{  
                try {  
                    if(socket != null){  
                        socket.close();  
                    }  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
            }  
        }  
    }  
      
    public static void main(String[] args) throws Exception {  
        new HelloServer();  
    }  
}  

命令行连接服务器 (本地测试如果ip地址用localhost,那么服务端接收到IPV6的ip)
telnet 127.0.0.1 5555


作者是一名自由程序员,住在上海,喜欢音乐、小说、旅行、以及编程。

P.S. 如果您喜欢这篇文章并且希望学习编程技术的话,请关注一下

上一篇 下一篇

猜你喜欢

热点阅读