码迷,mamicode.com
首页 > 其他好文 > 详细

基于UDP协议的控制台聊天程序

时间:2018-04-09 23:08:48      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:通过   客户   产生   根据   udp协议   密码   log   循环   重复   

一、聊天程序的功能

     1.能够登录账号、注册新账号

     2.能够进行群聊

     3.能够进行私聊

     注:该程序对传统的聊天程序进行了简化:

             1.服务器中只有一个群

             2.新注册的账号,默认已经添加到该群中

             3.私聊对象就在该群的在线好友中选择

二、聊天程序的架构

       该程序采用经典的c/s架构,即采用客户端/服务器架构。

      1.服务器的功能:

       (1)保存用户的账号和密码信息

       (2)根据客户端发送的各种类型的信息,进行相应的处理,如处理用户登录,用户注册,转发消息

      2.客户端的功能:

        1.注册新的账号

        2.登录已有账号,接收和发送消息,进行聊天对话

三、具体实现

       1.服务器程序

        服务器程序的主体是一个无限循环,用于接收客户端发送的消息。

        消息类型一共有四种,分别是登录请求、注册请求、群聊消息、私聊消息。这四种消息类型,可以用字符数组的第一个字符来进行区分,比如’L‘是Login的首字母,用来作为登录请求的标志,’R‘是Rigister  的首字母,用来作为          注册请         求的标志,’G‘是Group的首字母,用来作为群聊消息的标志,’P‘是Personal的首字母,用来作为私聊消息的标志。

        (1)处理登录请求

           将登录请求中的用户名和密码提取出来,与服务器存储的用户名和密码进行对比,若存在用户名和密码与之匹配,则进一步查看用户在线列表中是否存在该用户,如果已经存在该用户,则返回重复登录的信息,否则返回登录成功                           的信 息,并将该用户加 入在线列表;若用户名匹配失败则返回未注册用户的信息,密码匹配失败则返回密码错误的信息,皆为登录失败。其中,可以用数据库或 者是文件来为服务器存储数据,本程序采用文件存储用户的账号和密码信息。

       (2)处理注册请求

           将注册请求中的设置的用户名和密码提取出来,与文件中存储的用户名进行匹配,若匹配成功,则已存在用户名,返回重复注册的消息。若无匹配的用户名则表示无人注册该用户名,将该用户名和密码 写入文件,并返回注册成功的信息。

       (3)处理群聊消息

            接收群聊消息时可以得到发送该消息的客户端的ip地址和端口号,根据ip地址和端口号,可以在用户在线列表中找出该消息的发送者的名称,加在该群聊消息的前面,并转发给所有在先的用户,实现群聊的功能。

       (4)处理私聊消息

            确定私聊消息的发送者的方法同群聊消息。转发私聊消息时还要确定接收者。可以让发送者在发送的私聊消息首部加上接收者的名字,服务器将该接收者提取出来,并判定该用户是否在线,如果在 线,则将私聊消息转发给该用户;如果 该用户不在线,则将在线的用户列表返回给发送者,让发送者根据此列表重新选择私聊对象。

      2.客户端程序

           客户端程序要满足发送消息和接收消息两个功能,发送消息和接收消息是独立进行的,因此发送消息和接收消息可以用两个线程或者是进程来实现。控制台下,如果通过多线程来实现发送消息和接收消 息的独立,则存在一个问题,即当 接收聊天消息频繁时,接收消息的线程占据控制台的控制权,发送消息输入到控制台时还没有输入完,接收到的消息又打印到了控制台中,中断了要输入的消息。因               此,客户端由两个控制台程序组成,其中一个是发送器,用来登录、注册 以及发送消 息,另外一个是显示器,用来接收和显示消息。当登录账号时从服务器接收到成功的响应时,则自动弹出显示器显               示消息。

          为了可以在同一台主机上运行多个客户端,显示器必须分配不同的端口号。可以在发送器中运用随机函数产生一个端口号,并将该端口号写入到文件中,运行显示器程序时读取该文件中的端口号,建立            套接口,监听服务器转发来的消息。

          同时,发送器将该端口号发送给服务器,因此服务器保存了该客户端的显示器的ip地址和端口号,从而将群聊或者是私聊信息准确的发送给该客户端显示器。

四、注意事项

     作为聊天软件,服务器的作用至关重要,服务器如果崩溃,则整个聊天系统就会瘫痪。因此,防止服务器崩溃是一件至关重要的事。

     有一个值得考虑的问题是如果客户端非正常退出,服务器仍然认为该客户端在线,依然将群聊消息转发给该用户,那么发送给该客户端的套接字就会出现问题。如果继续用该套接字监听其他消息类型,服务器就会崩溃。有一个解决办法是为服务器创建一个套接口,专门用来接收客户端发来的消息。将消息转发给客户端时,也创建一个临时的套接口,因此,即使该套接口出现了问题,也不会影响整个服务 器的性能。

基于UDP协议的控制台聊天程序

标签:通过   客户   产生   根据   udp协议   密码   log   循环   重复   

原文地址:https://www.cnblogs.com/Rcchio/p/8762613.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!