聊天室

golang实现聊天室(五)

╄→尐↘猪︶ㄣ 提交于 2020-01-28 15:59:17
golang实现聊天室(五) 完成服务端广播消息 server package main import ( "fmt" "log" "math/rand" "net" ) type Client_list struct { list map[net.Conn]string } func main() { client_list := Client_list{make(map[net.Conn]string, 0)} var conn, err = net.Listen("tcp","127.0.0.1:6888") if err != nil { return } for { c, err := conn.Accept() if err != nil { return } go client_list.Receive(c) } } //noinspection GoUnresolvedReference func (client_list *Client_list) Receive(c net.Conn) { for { reveive_byte := make([]byte, 256) lens, err := c.Read(reveive_byte) if err != nil { log.Fatal("Receive error") } reveive_byte =

从王者荣耀看设计模式(二十一.中介者模式)

余生长醉 提交于 2020-01-14 12:35:36
从王者荣耀看设计模式(中介者模式) 一.简介 在王者荣耀中,有一个简单的聊天室,在聊天室中。玩家点击综合可以与全服的玩家发送消息,点击好友可向指定好友玩家私发信息。|ू・ω・` ) 二.模式动机 联合国是一个协调组织,各个国家就一些共同问题经由联合国进行协商,它取代了原本各个国家之间的直接交流,将各个成员国之间的强耦合关系转换为较为松散的耦合关系。在软件开发中,我们有时候也会需要使用类似联合国一样的中间对象来降低系统中类与类,对象与对象之间的耦合关系。 在本实例中,玩家与玩家多对多的通信,导致用户之间存在很强的关联性,将导致系统结构复杂、对象重用性差、系统扩展性低等问题,为了减少对象两两之间复杂的引用关系,使用中介者模式,使之成为一个松耦合的系统 三.中介者模式 中介者模式(Mediator Patern):用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式,属于对象行为型模式 中介者模式的应用场景 在以下情况中可以使用中介者模式 ■ 系统对象之间存在复杂的引用关系,产生的相互依赖关系结构混乱且难以理解。 ■ 一个对象由于引用了很多对象而且直接和这些对象通信,导致难以复用该对象 ■ 想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类,可以通过引入中介者类来实现

使用AWT的Java简单多人聊天室

笑着哭i 提交于 2020-01-14 00:48:03
客户端 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.*; import java.net.Socket; import java.util.Scanner; /** * <h3>untitled4</h3> * <p></p> * * @author : <a href="http://antigenmhc.cn/" target=_blank>我的博客♂还蛮大的</a> * @date : 2019-12-29 18:57 **/ public class Client extends Frame{ public static void main(String[] args) throws IOException { //初始化界面 new Thread(new Clients("客户端1")).start(); new Thread(new Clients("客户端2")).start(); new Thread(new Clients("客户端3")).start()

Java NIO 聊天室实例

我的梦境 提交于 2020-01-13 22:22:09
最近写了个Java NIO聊天室聊天的程序,NIO学习起来比较困难的,我的代码能给大家起到一个抛砖引玉的作用! 服务端: package test.javanio; /** * @author * @version * CreateTime:2010-12-1 下午05:12:11 * Description: */ import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.util.Date; import java.util.Iterator; import java.util.logging.Level; import java.util.logging.Logger; public class MySocketServer implements Runnable { private boolean running;

Java课程设计_聊天室_个人报告

落爺英雄遲暮 提交于 2020-01-10 00:47:36
1. 团队课程设计博客链接 JAVA团队课程设计博客--聊天室 2. 个人负责模块或任务说明 2.1 个人负责模块 使用JavaFx进行图形界面设计; 和数据库交互实现登录、注册、聊天记录存取和个人信息修改。 利用css美化JavaFx界面。 2.2 任务说明 首先设计登录和注册界面,并设置相应的按钮动作,待数据库成型后,可以进行一定交互,实现页面登录和账号注册。 再者设计简易个人界面,设计各模块需要使用的相应的组件,组装我们的群聊界面。 设计个人信息界面和修改个人信息界面,和数据库交互,实现个人信息的存储和修改。 再设计相关相关好友组件,并插入到好友列表中,以及设计相应的聊天框,并用于后续实时调用插入到聊天窗口中。 3. 自己的代码提交记录截图 4. 自己负责模块或任务详细说明 4.1 登录按钮代码: 分析:首先连接数据库,判断数据库中是否存在该方法,若存在则再判断该账号是否已经是在线状态,如果为在线则登录成功,并将数据库中该id账号设置成在线,则下一个账户如果再登录该账号,则给出已在线提示。如果号码密码对应不一致,则输出提示并重新输入。 4.2 注册时自动生成一个唯一的账号: 4.2.1 注册按钮监听器代码 分析:首先获取注册框中的填写信息,当发现两次密码输入不一致或密码框中为空,则弹窗提示错误信息并清空密码框让用户重新填写。若未发现以上情况,则调用自动生成唯一账号的代码

通过UDP实现简易聊天室(线程)255.255.255.255广播地址

空扰寡人 提交于 2020-01-08 14:16:11
代码: package cn.tedu.net.udp; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; import java.util.Scanner; public class UDPChatText { public static void main(String[] args) { //开启线程 new Thread(new Sender()).start(); new Thread(new Receiver()).start(); } } //代表发送端的类—线程 class Sender implements Runnable{ //声明对象 DatagramSocket ds; Scanner s; @Override public void run() { try { ds=new DatagramSocket(); s=new Scanner(System.in); //实现能一直发送数据 while (true){ //要发送数据 byte[] bs =s.next().getBytes(); //创建数据包—指明往哪发送数据

简单又好用的聊天室技术——WebSocket

房东的猫 提交于 2019-12-29 15:43:59
现在,很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP request的header是非常长的,里面包含的数据可能只是一个很小的值,这样会占用很多的带宽和服务器资源。 Ajax轮询——“定时的通过Ajax查询服务端" 而比较新的技术去做轮询的效果是Comet,使用了AJAX。但这种技术虽然可达到双向通信,但依然需要发出请求,而且在Comet中,普遍采用了长链接,这也会大量消耗服务器带宽和资源。 Comet——随着AJAX技术兴起而产生的新技术 用大白话揭开Ajax长轮询(long polling)的神秘面纱 面对这种状况,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽并达到实时通讯。 国际惯例,先上维基百科的解释。 "WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。" ——维基百科 上面是维基百科对WebSocket的解释,别问我如何解释上面这段话,因为我也没看懂,那么下面我用人话解释一下吧(仅仅是我的理解): WebSocket是一个协议,可以简单看成是HTTP协议的一个补充协议

java Scoket的c\\\\s结构聊天室

偶尔善良 提交于 2019-12-22 00:58:29
客户端端代码: package javaSocket; imp ort java.awt.BorderLayout; imp ort java.awt.Font; imp ort java.awt.event.ActionEvent; imp ort java.awt.event.ActionListener; imp ort java.awt.event.WindowAdapter; imp ort java.awt.event.WindowEvent; imp ort java.io.BufferedReader; imp ort java.io.IOException; imp ort java.io.InputStreamReader; imp ort java.io.PrintWriter; imp ort java.net.Socket; imp ort javax.swing.JButton; imp ort javax.swing.JFrame; imp ort javax.swing.JLabel; imp ort javax.swing.JOptionPane; imp ort javax.swing.JPanel; imp ort javax.swing.JScrollPane; imp ort javax.swing.JTextArea; imp ort

php websocket实现网页聊天室

陌路散爱 提交于 2019-12-13 01:45:46
chat.html: <!doctype html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"/> <title>HTML5 websocket 网页聊天室 javascript php</title> <style type="text/css"> body,p{margin:0px; padding:0px; font-size:14px; color:#333; font-family:Arial, Helvetica, sans-serif;} #ltian,.rin{width:98%; margin:5px auto;} #ltian{border:1px #ccc solid;overflow-y:auto; overflow-x:hidden; position:relative;} #ct{margin-right:111px; height:100%;overflow-y:auto;overflow-x: hidden;} #us{width:110px; overflow-y:auto; overflow-x:hidden; float:right;

Java大作业聊天室

不羁的心 提交于 2019-12-10 10:08:12
1.将用户数据保存到数据库 写这个聊天室呢,我的想法是先从界面写起,那么,对照qq,微信这些聊天室,第一步肯定是先要注册和登录,所以啊,我们就要将用户数据保存到数据库中,不然的话,当你第二次打开聊天室的时候又需要重新注册,这显然是不好的。 实现: 数据库的实现非常简单,我们只需要建立一个新的数据库再建立一张用户表即可,因为我不能实现qq号那样的主码,所以这里我是用用户名当主码的。 接下来就是在Idea中实现代码来连接到数据库了,这也没有什么难的,但是, 需要注意的是 ,由于MySQL使用的时间和我们不一样,所以要在url后面加上serverTimezone=UTC。 实现: package DB ; import java . sql . * ; import javax . swing . JFrame ; import javax . swing . JOptionPane ; /** * * @author GUOFENG --登录连接数据库 * */ public class UserDB { // 驱动程序名 String driver = "com.mysql.cj.jdbc.Driver" ; // URL指向要访问的数据库名jdbc String url = "jdbc:mysql://localhost:3306/jdbc?serverTimezone=UTC"