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

Rcchio Rcchio     2022-11-01     727

关键词:

一、聊天程序的功能

     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知识(代码片段)

...DP的功能比较弱,仅对IP层进行简单的接口包装,应用程序可基于UDP;而TCP可实现的功能,在应用程序层也可实现,那么即可绕开TCP,直接基于IP编程.TCP对比UDP协议TCPUDP是否可靠可靠不可靠[大概率丢包,乱序,重复]协议流式协议报文协议形... 查看详情

基于udp协议的网络程序

下图是基于UDP协议的客户端/服务器程序的一般流程:图1.1UDP协议通信流程UDP套接口是无连接的、不可靠的数据报协议;既然他不可靠为什么还要用呢?其一:当应用程序使用广播或多播时只能使用UDP协议;其二:由于他是无连... 查看详情

使用python实现一个hello/hi的简单的网络聊天程序(代码片段)

一、TCP/IP协议通信原理   TCP/IP协议包含的范围非常的广,它是一种四层协议,包含了各种硬件、软件需求的定义。TCP/IP协议确切的说法应该是TCP/UDP/IP协议。UDP协议(UserDatagramProtocol用户数据报协议),是一种保护消息边界的... 查看详情

java网络编程基于udp协议的通信

 使用UDP协议,写一个能在同一界面发送消息,并显示消息的聊天软件。代码实现如下:                packagecom.abel.socket;importjava.io.IOException;importjav 查看详情

基于socket的udp和tcp编程介绍

基于Socket的 UDP和 TCP编程介绍 一、概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结TCP/IP模型中传输层一层中的两个不同的通信协议。 TCP:传输控制协议,一种面向连接的协议,给用户进程提供可... 查看详情

tcp与udp,可靠udp如何实现

...协议都是传输层协议,为应用层提供信息载体。TCP协议是基于连接的字节流的可靠协议,有三次握手,四次挥手,超时重传,流量控制(滑动窗口),拥塞控制和差错控制,也正因为有可靠性的保证和控制手段,所以传输效率比UDP... 查看详情

网络协议分析课程设计:基于tcp协议网上聊天程序

...。最好是整个课程设计报告。急需!先谢过各位大触了!基于TCP协议网上聊天程序有的参考技术A写作攻略网上很多。说实话一下是教不会的。多查阅资料。或帮你处理。 参考技术B以前弄过一个不过,硬盘坏了就丢失了。无能为... 查看详情

基于udp协议的密码验证(代码片段)

利用Python实现socket编程1、客户端程序需完成功能:1)从名为’pswd.txt’的文件中读取密码。2)把密码发送到服务器程序。3)显示服务器程序的返回结果2、服务器程序需完成功能:1)接受来自客户端程序发送的密码。2)显示客... 查看详情

网络--udp知识(代码片段)

...DP的功能比较弱,仅对IP层进行简单的接口包装,应用程序可基于UDP;而TCP可实现的功能,在应用程序层也可实现,那么即可绕开TCP,直接基于IP编程.TCP对比UDP协议TCPUDP是否可靠可靠不可靠[大概率丢包,乱序,重复]协议流式协议报文协议形... 查看详情

基于udp协议的网络编程

类DatagramSocket和DatagramPacket实现了基于UDP协议网络程序UDP 数据报通过数据报套接字DatagramSocket发送和接收,系统不保证 UDP 数据报一定能够安全送到目的地,也不能确定什么时候可以抵达DatagramPacket对象封装了 UDP&nbs... 查看详情

java网络聊天软件开发,要基于udp的

开发一个类似QQ的聊天软件,软件分为服务器端和客户端两部分。客户和服务器、客户和客户采用UDP协议通信。软件实现以下功能:一基本功能①用户通过客户端向服务器注册,成为聊天用户。服务器端保存用户的信息。②用户... 查看详情

tcp和udp协议的区别

...和细节控制交给应用的通信传输。TCP与UDP基本区别:1、基于连接(TCP)与无连接(UDP)。2、TCP要求系统资源较多,UDP较少。3、UDP程序结构较简单。4、流模式(TCP)与数据报模式(UDP)。5、TCP保证数据正确性,UDP可能丢包。6、TCP保... 查看详情

tcp/udp协议

...互通话。 TCP(TransmissionControlProtocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前, 查看详情

tcp通信

...ControlProtocol,缩写为:TCP)是一种面向连接的、可靠的、基于字节流的通信协议    1.面向连接:先连接,再通信,好比打电话模型    2.可靠的,相对于UDP,TCP传输更可靠,TCP通过一序列的机制(面向连接机制、发送... 查看详情

golang学习十:网络编程(代码片段)

...协议(TransmissionControlProtocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议;UDP用户数据报协议(UserDatagramProtocol)是OSI参考模型中一种无连接的传输层协议,提供面向事 查看详情

聊天程序(基于socketthread)

聊天程序简述1、目的:主要是为了阐述Socket,以及应用多线程,本文侧重Socket相关网路编程的阐述。如果您对多线程不了解,大家可以看下我的上一篇博文浅解多线程 。2、功能:此聊天程序功能实现了服务端跟多个客户端之... 查看详情

tcp通信详解

...ControlProtocol,缩写为:TCP)是一种面向连接的、可靠的、基于字节流的通信协议    1.面向连接:先连接,再通信,好比打电话模型    2.可靠的,相对于UDP,TCP传输更可靠,TCP通过一序列的机制(面向连接机制、发送... 查看详情

基于quic协议的http/3

...被很好地支持。HTTP/3选择了一个折衷的方法——UDP协议,基于UDP实现了类似于TCP的多路数据流、传输可靠性等功能,我们把这套功能称为QUIC协议。关于HTTP/2和HTTP/3协议栈的比较。​通过上图我们可以看出,HTTP/3中的QUIC协议集合... 查看详情