简易聊天程序教程(四)客户端基本功能

源代码下载链接:http://download.csdn.net/detail/sky453589103/9514686

如果有什么问题,欢迎留言。

客户端的基本功能是根据服务器给出的接口逐步来实现的。客户端的设计流程是清晰的。简化的思考流程如下图所示:

当然,实现的时候就要考虑比较多的细节,比如在注册的时候,注册失败怎么办,登陆的时候,账号密码不匹配怎么办。但总的流程就是这样子的。

从上面的流程可以看出了,客户端的窗口模块分下面几个(附上动作的解析):

1 登陆窗口模块:

登陆窗口需要提供两个输入框,输入用户名和密码。在这个模块中需要执行一部分的输入检测,比如用户名不能为空,密码不能为空等。登陆窗口中,还必须要有一个注册按钮,在用户没有账号的时候,。提供注册的功能,新增用户。注册窗口跟登陆窗口之间可以相互切换,方便用户操作。

登陆窗口的关闭操作比较麻烦。首先,需要判断,用户时候登陆成功,登陆成功就只是释放登陆窗口的资源。如果同时打开了注册窗口,这个注册窗口也必须被关闭。在登陆成功的之后,设置主窗口的用户名,以标志成功。如果没有注册成功,登陆窗口的关闭将会关闭整个程序。

登陆窗口在主窗口执行之前执行,在登陆成功之前,主窗口不能被显示出来。登陆窗口在获取了用户的登陆信息之后,会将信息填入请求信息类中,然后发送给服务器处理。成功就打开主窗口,出错就弹出信息框。

登陆窗口应该显示在屏幕的中间。

2 注册窗口模块:

注册窗口中必须要让用户填写所需的所有的必要信息。目前,只有用户名,密码,性别这三个必要的信息。目前这个模块并没有检查输入的功能,在后续有待加入。注册窗口中必要有一个取消的按钮,提供给用户取消注册这个动作,改善用户体验,同时,关闭注册窗口也能取消这个动作。

执行完注册这个动作之后只会在服务器的数据库中执行这个动作,并不会执行登陆。因此还需要再次执行登陆操作。

注册窗口和登陆窗口之间是模态关系,也就说,不关闭注册窗口,是不能选择登陆窗口的。

注册窗口应该显示在屏幕的中间。

3 聊天窗口模块:

聊天窗口中要有一个输入框,和一个显示消息的文本框,和一个发送信息的按钮。输入框会自动换行,执行自动换行时,会以一个单词为单位来执行换行。显示消息的文本框,需要有发送信息的发送者,时间,以新的一行为开始显示消息文本。

在按下发送信息的按钮的时候,消息文本不管有没发送成功,都会在发送方的窗口显示出来,但不一定会在接收方显示,因为接收方有可能已经下线了。

当消息文本或者输入框超出了文本框的显示范围,需要使用滚动条来滚动显示内容。因为会自动换行,因此只需要垂直滚动条,而不需要水平滚动条。消息文本框中的消息应该是不能被用户修改的。但是可以被用户复制。输入文本框中,也有响应的复制,剪切和粘贴功能。

4 主窗口模块:

主窗口中,第一行显示自己的状态信息,接下来是还有列表,添加好友的按钮。列表中好友的信息包括,好友的名字和好友的状态。每个好友的信息为一行。双击还有的名字就可以打开对应的聊天窗口。如果一方先发送信息过来,主窗口要负责消息的监听,在监听到这类信息的时候先判断与这个还有的聊天窗口是否存在,如果存在就将这个窗口显示在最前,如果不存在就询问是否要和对方进行聊天,否则进行忽略,确认就新建一个新的聊天窗口。

对于新增好友的功能,在用户按下了新增按钮之后需要弹出一个对话框,使用户可以输入想要添加的好友的名字,然后获取这个好友名字并发送给服务器。服务器在处理这个用户名的时候,如果存在这个用户,则为他们添加好友关系,如果不存在则返回出错信息。

删除好友功能,应该以右键菜单的形式出现,当客户单击右键的时候,被单击的行要被选中,并且在选择了删除之后,好友列表中要删除这个好友,服务器端也要删除这两个人之间的关系。

时间: 2024-08-10 14:26:38

简易聊天程序教程(四)客户端基本功能的相关文章

简易聊天程序教程(一)自定义异常和消息格式

源代码下载链接:http://download.csdn.net/detail/sky453589103/9514686 如果有什么问题,欢迎留言. 自定义异常的目的是为了更好的表示出错的原因,能够针对不同的异常执行不同的处理. 异常的自定义是简单的,只是简单的继承了Exception类.下面给出所有聊天程序的异常类的基类的ChatException的定义: package SimpleChat; public class ChatException extends Exception{ /**

简易聊天程序教程(二)服务器的基本功能

源代码下载链接:http://download.csdn.net/detail/sky453589103/9514686 如果有什么问题,欢迎留言. 我设计的时候是先从服务器端开始设计的,服务器端先给出接口,然后客户端针对接口编程. 在说服务器的代码之前先说说数据库的设计吧. 数据的设计是简单的,只有两个表: create database SimpleChat; CREATE TABLE IF NOT EXISTS Account ( username varchar(50) NOT NULL

简易聊天程序教程(五)客户端的登陆和注册窗口

源代码下载链接:http://download.csdn.net/detail/sky453589103/9514686 如果有什么问题,欢迎留言. 其实大家也能想到,登陆和注册窗口其实很相似的,而注册窗口总是比登陆窗口多一些内容. 先来说说登陆窗口.登陆窗口的界面如下图: 登陆窗口继承字Dialog类,而不是继承自JFrame类.登陆窗口显示在屏幕中间,通过下面的方法就可以达到效果: setLocationRelativeTo(null); 在构造函数中调用这个方法,就能显示在屏幕中央,如果参

简易聊天程序教程(三)服务器的多线程

源代码下载链接:http://download.csdn.net/detail/sky453589103/9514686 如果有什么问题,欢迎留言. 如果一个服务器只能为两个用户提供服务器,那就真的是太渣了.很多时候,聊天的客户都会大于两个.因此需要提高并发量. 在Java中使用多线程还是很方便的.我在这个服务器程序使用的是实现Runnable接口的方法来定义自己的多线程操作.通过重写run方法,来实现自己的多线程操作. 每个线程都会有一个client成员变量,这个成员变量用来记录客户端的Soc

简易聊天程序教程(六)主窗口和聊天窗口

源代码下载链接:http://download.csdn.net/detail/sky453589103/9514686 如果有什么问题,欢迎留言. 主窗口用的是JList控件,在显示了登陆的跟人信息之后,接下来就是好友的列表. 为了方便以后拓展 ,我把好友的信息封装在FriendInformation中,FriendInformation类的定义也很简单的,都能看懂. 下面来逐步分析一下MainWin类: MainWin中比较重要的是事件的监听: 好友列表中的右键菜单的监听: JMenuIte

基于C# Winform的简易聊天程序[第一篇-两端通信]

程序简介 本聊天程序支持局域网内部客户端与服务端之间的互相通信. 原理 启动服务端后,服务端通过持续监听客户端发来的请求,一旦监听到客户端传来的信息后,两端便可以互发信息了.服务端需要绑定一个IP,用于客户端在网络中寻找并建立连接.信息发送原理:将手动输入字符串信息转换成机器可以识别的字节数组,然后调用套接字的Send()方法将字节数组发送出去.信息接收原理:调用套接字的Receive()方法,获取对端传来的字节数组,然后将其转换成人可以读懂的字符串信息. 界面设计 - 服务端 IP文本框 na

PHP制作简易聊天程序

近几天来,突然在查阅PHP中文手册时,看到了用PHP制作聊天室的示例,于是一时心血来潮也用PHP写了一个简易的WEB聊天室应用,在写聊天室的过程中,我遇到的问题其实不算很多,因为用php制作聊天室的原理是非常简单的,也许这与我自身思考问题的方式有关,我往往喜欢把任何看似复杂的东西简单化,我相信表面复杂的事物,其实都蕴含着简易原理,我的这种思维模式在这次WEB聊天应用的制作中起到了作用,下面我就将PHP制作WEB聊天室的原理给大家做一个介绍: 首先我们要建立一个WEB框架,这个框架也就是利用HTM

.Net学习笔记----2015-07-06(简易聊天程序)

直接上代码,注释俺写了不少,留着参考 服务端: 1 namespace sever 2 { 3 public partial class Form1 : Form 4 { 5 public Form1() 6 { 7 InitializeComponent(); 8 } 9 10 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 11 { 12 13 } 14 15 16 private void bt

Django搭建简易博客教程(四)-Models

原文链接: http://www.jianshu.com/p/dbc4193b4f95 Django Model 每一个Django Model都继承自django.db.models.Model 在Model当中每一个属性attribute都代表一个database field 通过Django Model API可以执行数据库的增删改查, 而不需要写一些数据库的查询语句 设置数据库 Django项目建成后, 默认设置了使用SQLite数据库, 在my_blog/my_blog/setting