• [JAVA小项目]GUI界面的局域网聊天室


    思路:

    1.服务端:

    1.1 创建ServerSocket 监听本地端口

    1.2 循环接收多个客户端的连接,并且把多个客户端连接的每个管道都为其创建线程。

    服务端类的成员:链表--每个成员都是线程类----也就是装载多个线程的容器

    线程类(管道类)成员:(每个线程类包含一根管道所拥有的输入流,输出流,线程名字(也就是客户端用户登陆的名字),线程标识)

    1.3 功能:

    1.30---- 构造器的初始化线程类的成员---------还要记得把新进来的客户端线程加入线程池

           1.31---- 提示客户端"欢迎xxx回来"-----(这个要在线程创建的时候(也就是收到客户端连接的时候)就提示)

    1.32---- 接收客户端的数据---并借助转换流转换为String类型,并返回该值

    1.33---- 发送数据给本管道另一端的客户端  (发送欢迎xxxx回来) ,(发送数据)

    1.34---- 能够群发----sendOther();  先判断发送的信息有没有包含特殊的字符如@ying: xxxx这样的私聊标识符,如果没有,则群发

                  群发的实现是---for(MyChannel other:all){ other.send()每个线程自己调用自己的send()方法来发送}

    1.35---- 能够私发:根据@:中间的名字判断 -->遍历线程池,判断属于哪个线程的名字 然后发送。other.name.equals(name),把名字,内容也取出来

    1.36---- run方法为sendOther(all,getMsgFromClient())方法

    2.客户端:

    2.0  客户端用户的登陆时的名字------------>控制台输入流----并作为发送线程的名字传给服务端做相应的处理

    2.1  调用Socket写好目的IP,和目的端口

    2.2  为了实现能够不分先后的接收数据和发送数据给服务端,要创建线程,封装-接收数据类Received 和Send类,都继承了Runnable接口

    2.3  主函数为 为两个线程分别创建两个静态代理,start启动

    3.GUI界面的实施:

    3.1 创建一个窗口类----extends JFrame 

    1.达到的目的是:

    1.首先窗口弹出:提示输入名字--然后点击登陆按钮--------窗口触发事件返回名字给client类用于线程名字的创建(也就是client类要能获取窗口类的成员信息---设置为内部类)

    2.buttonListener监听器务必要在Send创建之后才可以初始化设置,并注册

    3.所以Send类和Received类的创建必须要在init()里面,且在buttonListener监听器设置的前面,

    思路:ButtonListener监听器是不是可以在名字触发之后 再设置和注册

    Client类作为窗口类的内部类,让外部类能调用内部类的成员。

    文本框要加滚动条   JScroll 包装 JPanel 包装 JTextArea

    每个run动用了Thread.sleep()方法, 不知道为啥这样就好一点了

    问题:sleep的后遗症

  • 相关阅读:
    粤语·简约学习笔记
    Linux的网卡由eth0变成了eth1
    RedHat 更新CentOS Yum源
    Lamp 搭建
    像淘宝、京东这样的大型电商网站服务器构架完全部署方案
    完成静态服务器——Node.js摸石头系列之四
    实现使用Websocket通讯的聊天室——Node.js摸石头系列之六
    Node.js摸石头系列目录
    Aptana studio 3 修改配色方案
    Node.js 的安装和控制台命令——Node.js摸石头系列之一
  • 原文地址:https://www.cnblogs.com/zhanp/p/8798112.html
Copyright © 2020-2023  润新知