JAVA之IO学习(二)BIO

BIO编程模型

BIO多人聊天

服务端



import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;

/**
 * Created 多人聊天服务端 on 2020/6/28.
 */
public class ChatServer {

    private  int DEFAULT_PORT = 8888;
    private  final String QUIT = "quit";

    private ServerSocket serverSocket = null;
    private Map<Integer,Writer> clients =null;

    public ChatServer() throws IOException {

        clients = new HashMap<>();

    }

    //添加客户端
    public void addClient(Socket socket) throws IOException {
        if(socket!= null){
            int port = socket.getPort();
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            clients.put(port,bufferedWriter);
            System.out.println("客户端"+port+":加入到了服务端");
        }
    }


    //删除客户端
    public void removeClient(Socket socket) throws IOException {
        if(socket!= null){
            int port = socket.getPort();
            if( clients.containsKey(port) ){
                clients.get(port).close();
            }
            clients.remove(port);
            System.out.println("客户端"+port+":从服务端移除");
        }
    }

    //转发信息给其他客户端
    public void forwardMsg(String msg,Socket socket) throws IOException {
        System.out.println("转发给其它客户端"+msg);
            int port = socket.getPort();
            for( int clientPort: clients.keySet()){
                if( port != clientPort){
                    Writer writer = clients.get(clientPort);
                    writer.write(msg);
                    writer.flush();
                }
            }


    }


    //服务端启动
    public void start() {
        try {
            serverSocket = new ServerSocket(DEFAULT_PORT);
            System.out.println("服务器开始启动默认监听端口"+DEFAULT_PORT);

            while(true){
                //开处理客户连接的任务线程
                Socket socket = serverSocket.accept();

                new Thread(new ChatHandler(this,socket)).start();

            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                serverSocket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

    public static void main(String[] args) throws IOException {
        new ChatServer().start();
    }
}





import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

/**
 * Created by Founder on 2020/6/28.
 */
public class ChatHandler implements  Runnable{

    private ChatServer chatServer;

    private Socket socket ;

    private final String QUIT ="quit" ;

    public ChatHandler(ChatServer chatServer, Socket socket ){
        this.chatServer = chatServer;
        this.socket = socket ;
    }
    @Override
    public void run() {
        System.out.println("客户端"+socket.getPort()+"已经连接");
        try {
            chatServer.addClient(socket);
            //读取客户端的信息
            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String msg =null;
            while ((msg=reader.readLine())!=null){
                String clientMsg = "客户端"+socket.getPort()+"发送了一条消息:"+msg;
                System.out.println(clientMsg);
                //将消息转发给其它客户端
                chatServer.forwardMsg(msg,socket);
                //查看用户是否要退出
               if(readeyToQuit(msg)){
                   break;
               }
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public boolean readeyToQuit(String msg){
        return QUIT.equals(msg);
    }
}

 客户端



import java.io.*;
import java.net.Socket;

/**
 * Created 客户端 2020/6/28.
 */
public class ChatClient {

    final String QUIT = "quit" ;
    final  String DEFAULT_SERVER_HOST = "127.0.0.1";
    final  int DEFAULT_PORT = 8888;
    Socket socket = null;

    private BufferedReader reader;
    private BufferedWriter writer;

    //发送消息给服务器
    public void send(String msg) throws IOException {
        System.out.println("发送给服务器"+msg);
        if(!socket.isOutputShutdown()){
        writer.write(msg+"\n");
        writer.flush();
        }
    }


    //接受消息从服务器
    public String recive() throws IOException {
        if(!socket.isInputShutdown()){
            String msg = reader.readLine();
            System.out.println("从服务器接受"+msg);
            return msg;
        }
        return null;
    }

    //检查用户是否退出
    public boolean readToQuit(String msg){
        return QUIT.equals(msg);
    }

    //启动客户端
    public void start(){
        try {
            socket = new Socket(DEFAULT_SERVER_HOST,DEFAULT_PORT);
            System.out.println("客户端开始启动默认端口"+DEFAULT_PORT);
            reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            //处理客户端的输入
            new Thread(new UserInputHandler(this)).start();
            //读取服务器转发的消息
            String msg = null;
            while(((msg = recive() )!= null)){
                System.out.println(msg);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new ChatClient().start();
    }
}




import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * Created 用户输入处理 2020/6/28.
 */
public class UserInputHandler implements Runnable{
    final String QUIT = "quit" ;
        private  ChatClient chatClient;
        public UserInputHandler( ChatClient chatClient ){
            this.chatClient = chatClient ;
        }
    @Override
    public void run() {
        BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
        while (true){

            //先发给服务端
            try {
                chatClient.send(consoleReader.readLine());
                chatClient.readToQuit(consoleReader.readLine());
            } catch (IOException e) {
                e.printStackTrace();
            }



        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生就业服务平台管理系统按照操作主体分为管理员和用户。管理员的功能包括学生档案管理、字典管理、试卷管理、试卷选题管理、试题表管理、考试记录表管理、答题详情表管理、错题表管理、法律法规管理、法律法规收藏管理、法律法规留言管理、就业分析管理、论坛管理、企业管理、简历管理、老师管理、简历投递管理、新闻资讯管理、新闻资讯收藏管理、新闻资讯留言管理、学生信息管理、宣传管理、学生管理、职位招聘管理、职位收藏管理、招聘咨询管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 大学生就业服务平台管理系统可以提高大学生就业服务平台信息管理问题的解决效率,优化大学生就业服务平台信息处理流程,保证大学生就业服务平台信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理新闻信息,管理大学生就业服务平台信息,包括考试管理,培训管理,投递管理,薪资管理等,可以管理新闻信息。 考试管理界面,管理员在考试管理界面中可以对界面中显示,可以对考试信息的考试状态进行查看,可以添加新的考试信息等。投递管理界面,管理员在投递管理界面中查看投递种类信息,投递描述信息,新增投递信息等。新闻信息管理界面,管理员在新闻信息管理界面中新增新闻信息,可以删除新闻信息。新闻信息类型管理界面,管理员在新闻信息类型管理界面查看新闻信息的工作状态,可以对新闻信息的数据进行导出,可以添加新新闻信息的信息,可以编辑新闻信息信息,删除新闻信息信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值