`
liuyanttkl
  • 浏览: 20316 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

小型CHATROOM分析1

阅读更多
Chat程序思路分析:

■ 服务器端的程序流程:启动服务器,等待客户端的进入,客户端连接以后启动独立的线程,处理客户端的线程(发送欢迎文字要求客户输入用户名,给所有用户通知告诉所有人有用户进来,如果客户机发送一条消息 则把它发给所有的用户,还可以发送给指定的客户)。

■ 编写三个类:ChatServer类,负责启动一个ServerSocket,使进入Socket的对象创建一个ProcessClient的对象,ProcessClient类实现了Runnable接口,它独立运行处理某一个客户端,创建成功后,把自己放入UserManager队列中,当要发送消息的时候,把消息发送给其他的客户端,并且在退出的时候,把自己从队列中删除。UserManager类是一个单实例形式的工具类,它提供给ProcessClient一些用户管理用户的方法,例如,加入用户,删除用户,广播消息等,由于会有多个用户线程处理其中的方法,所以其中的方法大多声明为synchronized.

■程序实现(错误和技巧)

1:首先创建工具类UserManager类:一个单实例类,里面的方法都声明为public static synchronized.接下来思考 需要对客户端传入的Socket转杯哪些管理的方法。取得一个线程对象,添加用户,删除用户,统计在线用户,给所有人发送消息,给指定的人发送消息,实例化一个用户线程的队列private static void java.util.Map<String,ProcessClient> clientMap=new java.util.HashMap;

●取得一个线程对象的方法:

Public static synchronized ProcessClient getUserThread(String name)

{

//返回一个客户端

Return clientMap.get(name);

}

●添加一个用户的方法:

Public static synchronized ProcessClient addUserThread(String name.ProcessClient client)

{

Return  clientMap.put(name,Client);

}

●删除一个用户的方法:

Public static synchronized ProcessClient deleteThread(String key)

{

Return clientMap.remove(key);

}

●统计在线用户的方法:

Public static synchronized int getOnlineCount()

{

Return clientMap.size();

}

●发信息给所有人的方法:参数srcName代表发送的人,msgContent 代表发送的消息内容

Public static synchronized sendToAllUser(String srcName,String msgContent)

{

//向客户端队列的一个遍历发送

msgContent= srcName+”说”+ msgContent+”\r\n”;

//set是一个集合

java.util.Set<String > set= clientMap.keySet();

//遍历这个集合

java.util.Iterator key IT= set.iterator();

while(keyIT.hasNext())

{

String keysUser= keyIT.next();

ProcessClient pc= clientMap.get(keysUser);

//取出ProcessClient中的一个对象,然后向其他用户发送消息

Pc.sendToClient (srcName,msgContent);

}

}


分享到:
评论

相关推荐

    chatRoom

    1. **ASP.NET 2.0新特性**:了解ASP.NET 2.0的改进,如母版页(Master Pages)用于页面布局,主题和皮肤(Themes and Skins)提供统一的界面风格,以及配置文件的增强,使得配置更加灵活。 2. **用户认证与授权**:...

    chatroom

    1. **服务器端**(Server):使用如Java、Python、Node.js等编程语言实现,负责接收客户端连接、处理消息转发、维护用户状态等。可能包含以下文件: - `server.py` 或 `server.js`:主服务程序 - `database_...

    chatroom_chatroom_

    在IT行业中,聊天室(Chatroom)是一种在线应用程序,它允许用户实时交流和分享信息。"chatroom_chatroom_"这个标题可能是指一个关于聊天室应用的项目或代码库,而"chat room ready code app"描述则表明这是一段已经...

    ChatRoom聊天

    《ChatRoom聊天:MFC与ADO技术在聊天应用中的实践》 在信息技术高速发展的今天,聊天工具已经成为我们日常生活中不可或缺的一部分。"ChatRoom聊天"项目就是这样一个基于MFC(Microsoft Foundation Classes)框架...

    聊天室chatRoom

    1、运行c#于ASP.NET 技术实现聊天室chatRoom功能

    ChatRoom用户手册1

    ChatRoom用户手册1

    Linux-chatroom.zip

    本项目名为“Linux-chatroom”,通过分析其提供的代码,我们可以深入理解如何在Linux环境下实现多客户端连接并支持群聊、私聊功能。这个项目涉及的技术点主要包括网络编程、多线程、并发处理以及数据通信协议。 1. ...

    ChatRoom(Csocket).rar_ chatroom_Chatroom_csocket_csocket聊天程序

    1. **套接字基础**:套接字是网络通信的基本单元,用于在两台计算机之间传输数据。在TCP/IP协议栈中,有两种主要类型的套接字:流套接字(SOCK_STREAM)和数据报套接字(SOCK_DGRAM)。聊天程序通常使用流套接字,...

    chatroom(csocket)

    通过对这些源码的学习和分析,你可以深入理解Csocket的工作原理,以及如何利用它来构建实际的网络应用。 总的来说,基于Csocket的简单聊天室实现涉及了网络通信的基本概念,如套接字的创建、连接、监听、数据传输等...

    chatroom1_聊天室_c_linux_

    【标题】"chatroom1_聊天室_c_linux_" 指的是一个使用C语言开发的、基于Linux操作系统构建的多人聊天室系统。这个系统设计的目标是能够在Linux环境下为用户提供一个可容纳百人的实时交流平台。 在Linux环境中开发...

    ChatRoom测试报告1

    ChatRoom测试报告1详细分析 本测试报告针对的是一个基于Socket技术实现的计算机网络课程项目——ChatRoom。Socket是网络编程中的基础组件,它允许两个应用程序通过网络进行通信,这里是服务端与客户端之间的数据...

    chatroom_Chatroom_聊天室_sportaqq_chatroom在线_

    【标题】"chatroom_Chatroom_聊天室_sportaqq_chatroom在线_" 指的是一个关于在线聊天室的应用,特别提到了sportaqq和chatroom在线,这可能是一个特定的聊天室服务或者平台,可能与体育或游戏社区有关。 【描述】...

    ChatRoom

    1. **实时通信**:ChatRoom提供即时消息传递,用户可以发送文字、表情、图片、文件等多种形式的信息,并立即得到其他用户的回应。 2. **多用户参与**:一个聊天室可以同时容纳多人参与,使得群体讨论和协作成为可能...

    chatroom_Chatroom_chatroom.com_联合阵线versi_网络聊天室_TheRoom_

    Simple version of the Internet chat room.

    ChatRoom(Csocket)

    1. **套接字(Socket)编程**:套接字是网络通信中的基本单元,它提供了一种进程间通信(IPC)的方式,允许运行在同一或不同计算机上的应用程序之间交换数据。Csocket是Visual C++中处理套接字操作的类库,它提供了...

    chatroom-master_web_

    【标题】"chatroom-master_web_" 指示了一个基于Web的对话系统项目,其中包含了实现语音聊天和视频录制功能的核心代码。这个项目很可能是为在线沟通或者社交平台设计的,允许用户通过网页浏览器进行实时互动。 ...

    聊天室程序(ChatRoom.rar)

    1. **Windows Socket API**:Winsokt API是网络编程的基础,它包括了一系列的函数,如`socket()`用于创建套接字,`bind()`用于绑定IP地址和端口,`listen()`和`accept()`用于服务器端建立连接,以及`connect()`用于...

    java chatroom

    1. **服务器端**: - 使用`ServerSocket`类创建服务器端的监听套接字,监听1982端口,等待客户端的连接请求。 - 当有新的客户端连接时,通过`accept()`方法接收套接字,并创建一个新的`ServerThread`线程来处理该...

Global site tag (gtag.js) - Google Analytics