socketChatRoom_Client(聊天室客户端)

用socket底层原理实现简单聊天室程序,本篇为客户端

https://gitee.com/muyiafa/socketchatroom

socketChatRoom_Server(聊天室服务端)_木易阿发的博客-优快云博客

文章目录

* 1、创建创建socket连接:构造方法里通过new socket指定ip和端口 实现连接
* 2、向服务器发送消息
* 3、接受其他客户端(主机广播)发送过来的信息
* 4、端口:8888

package homeWork.ChatRoom;

import java.io.*;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
/**
 * author:木易阿发
 * time:220707
 * moditime:220710
 * 1、创建创建socket连接:构造方法里通过new socket指定ip和端口 实现连接  √
 * 2、向服务器发送消息
 * 3、接受其他客户端(主机广播)发送过来的信息
 */
public class Clients {
    private Socket socket;//内部类可用

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

    //构造完成器启动时连接
    public Clients() {
        try {
            System.out.print("启动客户端...(");
            this.socket = new Socket("localhost",8888);
            System.out.println("连接成功!)");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void start(){//向服务器发送消息
        try {

            //启动一个线程来接收服务器广播过来的其他客户端消息并打印在控制台
            Runnable serverHandler= new ServerHandler();
            Thread thread = new Thread(serverHandler);
            thread.setDaemon(true);//设置为守护线程
            thread.start();


            OutputStream os = socket.getOutputStream();//通过socket获取字节输出流
            OutputStreamWriter osw = new OutputStreamWriter(os, StandardCharsets.UTF_8);//字节转换流,将字符转换诶字节写出指定编码
            BufferedWriter bw = new BufferedWriter(osw);//缓冲输出流,保证语句的完整性
            PrintWriter pw = new PrintWriter(bw,true);//字符输出流(特别注意开启行刷新),按行写出控制台输入的消息
            String lines;
            Scanner ins = new Scanner(System.in);
            System.out.println("欢迎来到发哥聊天室,累了输入\"exit\"结束聊天!");
            while (true) {
//                System.out.print("输入发送:");
                lines = ins.nextLine();
                if ("exit".equals(lines)) {
                    System.out.println("拜拜咯,下次再见!");
                    break;
                } else if ("".equals(lines)) {
                    System.out.print("\" \"-->空消息发送失败!!!\n");
                    continue;
                }
                pw.println(lines);//写出消息数据
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                socket.close();//关闭服务器连接同时也关闭流连接
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    //读取服务器广播送过来的消息并过滤本机发送的消息,打印在控制台
    private class ServerHandler implements Runnable{
        @Override
        public void run() {//交互任务
            try {
                InputStream is = socket.getInputStream();//通过socket获取输入流,得到服务端发广播的消息
                InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);//字符转换流,将is的字节流转换为字符
                BufferedReader br = new BufferedReader(isr);//缓冲字节输入流,块读取
                String line;
                while((line = br.readLine())!=null) {
                    System.out.println(line);
                }
            } catch (IOException e) {
//                e.printStackTrace();
            }
        }
    }
}

/**------------------反爬声明o(▽)咻咻咻-------------------

** 作者:木易阿发 版权声明:**

本文为博主倾情原创文章,转载请附上源文链接!

如觉得本文对你有所收获,你的请评论点赞与

转发也将是鼓励支持我继续创作的动力。

更多精彩在视频号和公众号或 百度 *木易阿发* !

Gitee:木易阿发 (muyiafa) - Gitee.com

个人网站:http://www.muyiafa.com

乐学至善 开源共享 知行合一。

-------------------咻咻咻o(▽)反爬声明--------------------*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程练习生2

你的鼓励将是我创作的最大动力o

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值