`
神说要好好学习
  • 浏览: 5847 次
  • 性别: Icon_minigender_2
最近访客 更多访客>>
社区版块
存档分类
最新评论

群聊的简单实现

 
阅读更多
群聊就是群聊就是大家聚在一起聊天,每一个参与者说的话都可以被其他参与者看见,
也就是说:服务器接受到客户机上传的信息后,将信息分别在发送给每一个客户机

V1版本的实现:telnet连结,一个客户机发出消息,其他的客户机可以接受的到

在服务器线程中,每当有客户机申请连结的时候,就会启动一个服务器线程,来处理此连结,先用一个队列将这些服务器线程保存起来
每保存一个服务器线程对象,就相当于保存了一个客户机对象(个人理解。。。仅供参考)

启动服务器后,有客户机申请连结,当连结成功后,启动一个服务器线程来处理该链接,并将该线程添加到队列中去。

服务器线程对象serverthread首先要通过输入流InputStream读取客户机传来的消息

然后通过方法sendToAll()将消息传给队列中其余的线程:
//静态方法,由类名就可以调用
	/**
	 * 将消息msg发送给所有的客户机
	 * @param msg  消息
	 * @param sst  发出原始信息的客户机对应的线程
	 */
	public static void  sendToAll(String msg,ServerThread sst){
		for(int i = 0;i<stList.size();i++){
			ServerThread st = stList.get(i);
			st.sendToClient(sst.name + "say: " +msg);
		}
	}
	
	


         再由每一个线程,输出到各自对应的客户机上

①将InputStream封装成BufferedReader,方便信息的读入
//InputStream只能一个字节一个字节的读取,现在将其封装成BufferedReader对象,这样就可以一次读取一行
//BufferedReader的构造器要有一个Reader类型的参数,而InputStreamReader是Reader的子类
BufferedReader br = new BufferedReader(new InputStreamReader(ins));
②处理服务器线程的,单独写成一个类,也可以将管理这些线程的方法写进ServerThread类中
③在自己写程序时,经常会先把框架写好,即我需要哪些方法,来实现那些功能,但是这样也经常会忘记往里面填写内容,尤其是main()和run()
④空指针异常。。。这个一路伴随我成长的错误。。。
  输出流OutputStream是空的,应该是在获取ous = client.getOutputStream()的代码为未执行时就使用了ous
问题出现在管理的添加方法调用上,即ManageServer.addST(ServerThread st);的调用上
先启动该线程?现将线程对象加入到队列中去?
答案肯定是先启动线程,在获取了ous:ous = client.getOutputStream()
也就是说,人不能太死心眼,我最开始把ManageServer.addST(ServerThread st)写在启动线程之后,但是谁规定添加线程到队列的函数一定要紧紧地、一步不差地跟在创建线程对象之后呢
⑤先从线程队列中移除,再关闭线程
分享到:
评论

相关推荐

    简单实现群聊 java小程序

    在本文中,我们将深入探讨如何使用Java编程语言来实现一个简单的群聊程序。这个程序包含两个主要组件:ChatServer和ChatClient,分别对应服务器端和客户端。通过这两个类的交互,用户可以加入聊天室,发送消息,并...

    群聊图片的简单实现

    本项目"群聊图片的简单实现"专注于生成包含群内成员头像的群聊图片,这为用户提供了一种直观的方式去个性化他们的聊天群体。 首先,我们需要理解如何实现这一功能。基本的步骤包括: 1. **数据收集**:获取群内...

    基于java GUI界面的简易netty聊天室(实现群聊和私聊)

    【标题】基于Java GUI界面的简易Netty聊天室实现了群聊和私聊功能,通过集成FastJSON库处理JSON格式的数据编码与解码。这个项目旨在为用户提供一个简单易用的聊天平台,用户可以通过图形化界面进行实时通信。下面将...

    java做的简单群聊

    【Java实现简单群聊系统详解】 在信息技术领域,开发一个基于Java的简单群聊系统是一项常见的练习,旨在提升开发者在网络编程、多线程以及数据交互等方面的能力。本项目主要涉及的技术栈包括Java语言基础、Socket...

    UDP实现聊天工具(可群聊和私聊)

    UDP(User Datagram Protocol)是一种无连接的传输层协议,它提供了简单、快速的数据发送服务,但不保证数据的可靠传输。在这个项目中,我们将探讨如何使用UDP来构建一个聊天工具,支持群聊和私聊功能。 1. UDP基础...

    websocket实现单聊和群聊

    在这个基于Tomcat7和JDK7的WebSocket实现中,我们将探讨如何构建一个简单的单聊和群聊系统。首先,我们需要确保我们的环境支持WebSocket。Tomcat7从版本7.0.27开始支持WebSocket,而JDK7则提供了WebSocket的API。 1...

    socket,多线程实现群聊

    本文将深入探讨如何利用多线程和Socket技术来实现一个简单的群聊应用。这个应用包括两个主要部分:服务端(Server)和客户端(Client)。 首先,我们要理解Socket的概念。Socket是网络上的进程间通信(IPC)的一种...

    Java实现简单的QQ群聊系统

    利用Java实现的一个简单的群聊程序,模仿群聊,通过本地通讯,实现了简单的群聊功能,目的是为了熟悉Java的Socket、线程、输入/输出流、Swing以及利用javadoc生成HTML文档。练习时候写的,所以功能和界面都比较简单...

    Select实现群聊和私聊

    在这个场景中,`Select`被用来实现群聊和私聊功能,这对于构建聊天应用程序是非常关键的。 首先,我们要理解`Select`的工作原理。`Select`函数会阻塞直到至少有一个指定的文件描述符准备就绪,可以进行读写操作。这...

    android基于环信自定义群聊以及表情简单集成

    以上就是基于环信在Android上实现自定义群聊及表情集成的关键步骤。在实际开发中,还需要考虑错误处理、用户登录状态维护、网络状况检测等多方面因素。通过不断的调试和优化,可以打造出一款功能完善、体验优秀的...

    socket编程实现简单私聊群聊源码

    在本示例中,"socket编程实现简单私聊群聊源码" 涉及到的是如何使用Socket来构建一个基本的聊天应用程序,包括一对一的私聊和多用户参与的群聊功能。 首先,Socket是操作系统提供的接口,它允许应用程序通过网络...

    JAVA实现局域网群聊(开源)

    通过分析这个开源项目,我们可以了解到如何利用Java网络编程API来创建一个简单的群聊系统。 首先,我们需要了解UDP(User Datagram Protocol,用户数据报协议)。UDP是一种无连接的、不可靠的传输层协议,它不保证...

    JavaSocket编程实现的简单群聊软件

    JavaSocket编程实现的简单群聊软件是基于Java的网络通信技术,主要利用了TCP协议进行数据传输。在本文中,我们将深入探讨Java Socket编程的概念、原理以及如何利用它来构建一个简单的控制台版群聊应用。 一、Java ...

    基于TCP实现客户端群聊及服务端发公告简单功能

    基于TCP实现一个服务端连接多个客户端后,客户端群聊和服务端发公告功能。

    一键登录,实现群聊、私聊功能的java聊天室

    【标题】"一键登录,实现群聊、私聊功能的java聊天室"涉及的主要知识点包括Java编程语言、网络通信机制BIO(Blocking I/O)、图形用户界面GUI以及多线程编程。下面将对这些关键点进行详细介绍。 1. **Java编程语言*...

    C#winform窗体+socket实现登录通信聊天软件(可私聊与群聊)

    提供两个版本:第一个测试版,是可以在一台电脑模拟实现群聊私聊的(由于ip是一样的,所以写死了);第二个是成品,如果要测试的话要找局域网内多台不同的电脑测试(因为用户之间是以IP地址区分的)。压缩包里附有...

    java 利用scoket实现多个客户端之间的群聊

    Java 使用Socket实现多客户端群聊是一项基础且重要的网络编程任务,它涉及到TCP/IP通信协议、多线程处理以及数据的序列化与反序列化。在这个过程中,我们将创建一个服务器端来接收并转发消息,以及多个客户端用于...

    WCF群聊程序示例源代码

    4. **运行示例**:可能包含一个简单的用户界面,允许用户输入消息并展示接收到的消息,模拟群聊环境。 5. **数据传输对象**:为了传输聊天消息,可能会定义一个自定义的数据类,用于封装用户ID、消息内容和时间戳等...

    微信群聊生成九宫格形式的头像

    至于提供的源码,"JavaApk源码说明.txt"可能是对源代码的简单说明,"下载更多打包源码~.url"可能是指向更多相关源码的链接,而"防微信群聊九宫格头像"可能是包含具体实现的Java源文件,可以从中学习到上述技术的具体...

    java 单聊群聊系统

    基于java socket 做的简单的聊天系统、简单实现了单聊群聊功能、、

Global site tag (gtag.js) - Google Analytics