聊天室程序练习

客户端

public class Client {
    
    

        private Socket socket;

        public Client() {
    
    
            try {
    
    
                System.out.println("链接开始");
                // 端口号是计算机提供服务的接口的编码
                socket = new Socket("localhost",8088); //IP地址,端口号
                System.out.println("连接成功");
            } catch (IOException e) {
    
    
                e.printStackTrace();
            }
        }

        public void start(){
    
    
            try {
    
    
                /**
                 *想要发出信息,需要从socket对象中获取输出流
                 */
                OutputStream os = socket.getOutputStream();
                OutputStreamWriter osw = new OutputStreamWriter(os,"utf-8");
                BufferedWriter bw = new BufferedWriter(osw);
                PrintWriter pw = new PrintWriter(bw,true); //自动调用flush

                Scanner scr = new Scanner(System.in);
                while (true){
    
    
                    String msg = scr.nextLine();
                    pw.println(msg);
                }
            }catch (Exception e){
    
    
                e.printStackTrace();
            }
        }

        public static void main(String[] args) {
    
    

            Client client = new Client();
            client.start();
        }
    }

服务端

public class Server {
    
    
    private ServerSocket server;

    public Server() {
    
    
        try {
    
    
            System.out.println("服务器启动中");
            server = new ServerSocket(8088);
            System.out.println("服务器启动完毕");
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }

    public void start(){
    
    
        /*
        Socket accept()
        该方法是一个阻塞方法,调用后,程序暂停等待客户端的信息发送过来
        没有信息过来就一直等
         */
        try {
    
    

            System.out.println("等待客户链接");
            Socket socket = server.accept();
            System.out.println("一个客户端链接了");

            /*
            从socket中获得输入流
            InputStream getInputStream()
             */
            InputStream is = socket.getInputStream();
            InputStreamReader isr = new InputStreamReader(is,"utf-8");
            BufferedReader br = new BufferedReader(isr);

            String msg;   //linux系统停到客户端后会一直输出空,导致无法控制。写成这种可以避免
            while ((msg=br.readLine())!=null) {
    
    
//                 = br.readLine();
                System.out.println(msg);
            }
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
    
    
        Server server = new Server();
        server.start();
    }
}
  • Socket accept()
    该方法是一个阻塞方法,调用后,程序暂停等待客户端的信息发送过来
    没有信息过来就一直等

猜你喜欢

转载自blog.csdn.net/sinat_33940108/article/details/120942200