C/S架构网络聊天软件——Java Chat Application 用java做一个聊天机器人

Fighting!

    • 一、C/S概念
      • 1.1 什么是C/S
      • 1.2 C/S与B/S的区别
    • 二、主页面
    • 三、介绍
    • 四、特征
    • 五、jServer
    • 六、jMessenger
    • 七、使用代码
      • 7.1 导入项目后报错情况
      • 7.2 解决办法

一、C/S概念

1.1 什么是C/S

  C/S分布式模式,是计算机用语。C是指Client,S是指Server,C/S模式就是指客户端/服务器模式。是计算机软件协同工作的一种模式,通常采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。

1.2 C/S与B/S的区别

C/S模式是一种两层结构的系统,第一层是在客户端上安装客户端应用程序,第二层是在服务器上安装应用服务器。在C/S模式的工作过程中,客户端程序请求,服务器程序接收并处理客户端程序请求,并返回结果。

B/S模式,即浏览器/服务器模式,是在传统的两层C/S模式基础上发展起来的一种新的网络结构模式,其本质是三层C/S模式。

在用户的计算机上安装浏览器软件,在服务器上存储数据,安装服务应用程序,如WWW服务器和文件服务器。用户通过浏览器访问服务器,以进行信息浏览、文件传输和电子邮件服务。

两者区别如下:

一、指代不同

  1. C/S:就是指客户端/服务器模式。是计算机软件协同工作的一种模式,采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。

  2. B/S:是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。

二、原理不同

  1. C/S:客户端运行应用程序,服务器端运行服务程序。应用程序向服务程序发出一个应用程序。

  2. B/S:统一客户端,将系统功能实现的核心部分集中到服务器,简化系统的开发、维护和使用。只需在客户机上安装一个浏览器,如NetscapeNavigator或InternetExplorer,服务器就会安装SQLServer、Oracle、MYSQL等数据库。浏览器通过Web服务器与数据库交互。

三、优势不同

  1. C/S:可以充分发挥客户端PC的处理能力,很多工作经过客户端处理后可以提交给服务器。相应的优点是客户端响应速度快。

  2. B/S:总拥有成本低,维护方便,分布强,开发简单。它可以在任何地方操作,而不需要安装任何特殊的软件。

二、主页面

在这里插入图片描述
视频演示:
https://www.bilibili.com/video/BV1Dv41187eW?pop_share=1
代码下载:

百度网盘链接:https://pan.baidu.com/s/1tpVFoOM5XcrKQbM7xf0HNA
提取码:8888

或者源地址:https://www.codeproject.com/Articles/524120/A-Java-Chat-Application

三、介绍

  在本文中,将演示一个聊天应用程序,它可以同时处理多个用户。它还支持文件传输。

它完全基于Java,由两部分组成:jMessenger(客户端应用程序)和jServer(服务器应用程序)。

四、特征

  1. 同时处理多个用户
  2. 支持公共和私人消息
  3. 用户注册和登录可用
  4. 支持文件传输

五、jServer

  jServer主要有两个类分别处理连接和消息:
在启动时SocketServer单独运行在一个线程中,它会监听是否有客户端连接服务器,一旦发现客户端jServer就会创建一个单独的线程去运行ServerThread。
  ServerThread创建后就会持续的监听来自客户端的消息,并将消息交由SocketServer处理。同样,它支持将来自客户端的消息转发到其他客户端。jServer将客户端用户名和密码保存在data.xml中,以支持用户注册功能。

在这里插入图片描述

// In ServerThread read the incoming message and hand it to SocketServerMessage msg = (Message) streamIn.readObject();
server.handle(ID, msg);
.......// In SocketServer process the messages based on their typepublic synchronized void handle(int ID, Message msg){  if(msg.type.equals("login")){....}else id(msg.type.equals("message")){if(msg.recipient.equals("All")){ Announce("message", msg.sender, msg.content); }else{// Find the thread of recipient and forward it to him}}
.......

六、jMessenger

  jMessenger通过指定的ip地址和端口号连接到jServer。然后,到达的消息以及它们的发送者会显示在留言板上。需要说明的是,在传输文件时,文件并不通过服务器,而是客户端之间启用单独线程直接传输,这样可以同时进行聊天和文件传输。jMessenger将消息记录保存在History.xml中,可以查看聊天历史记录。
在这里插入图片描述
在这里插入图片描述

当用户想要发送文件时,首先他的请求是通过type消息发送的upload_req。收件人然后执行以下操作:

  1. 接收方以类型为消息的形式发送其答复 upload_res
  2. 如果请求被接受,那么收件人将打开一个新端口
  3. 为了获得肯定的答复,收件人的IP地址和端口号将被发回。
  4. 发件人在收到肯定答复后将连接到此套接字并开始文件上传
    这种方法的优点是客户端可以同时聊天和传输文件。与消息不同,文件不会通过jServer。
// On recipient side, start a new thread for downloadDownload dwn = new Download(....);
Thread t = new Thread(dwn);
t.start();
send(new Message("upload_res", ui.username, dwn.port, msg.sender));
// Reply to sender with IP address and port number
.........// On sender side, start a new thread for file upload// Connect to the port specified in reply
Upload upl = new Upload(addr, port, ui.file, ui);
Thread t = new Thread(upl);
t.start();

七、使用代码

代码下载:点击此处

注意:一定要关防火墙

在这里插入图片描述

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
让这个可爱的宝藏女孩在努力的道路上与你一起同行!
如有转载,请注明出处(如不注明,盗者必究)

7.1 导入项目后报错情况

用IDEA导入项目后java项目不能运行,像这样

在这里插入图片描述

7.2 解决办法

查看sdk是否设置: File > Project Structure > Project
在里插入图片描述
IDEA不能自动对源代码识别出来src目录,需要我们进行手动设置:
src目录=》右键 > make Directory as > Source Root
在这里插入图片描述

于是我又报了一个错:

Cannot start compilation: the output path is not specified for module "ruanjianjiagou".
Specify the output path in the Project Structure dialog.

在这里插入图片描述
点击OK
在Modules设置里勾选”Inherit project compile path”
在这里插入图片描述
设置Project中的”Project compiler output
在这里插入图片描述
我在运行时又出现这样的报错

lnformation: java:Errors occurred while compiling module 'ruanjianjiagou'
lnformation: javac 1.8.0_191 was used to compile java sources
Information: 2021/4/6 8:54 - Build completed with 1 error and 0 warnings in 5 s 190 msError: java:无效的源发行版: 13

如图:
在这里插入图片描述
解决方式:选择最上面一个,这里可以参考你自己当前已经可以运行的项目,选一样的就好了。
在这里插入图片描述
最后再重启下项目

参考:

  1. https://zhidao.baidu.com/question/569834641.html
  2. https://baike.baidu.com/item/C/S%E5%88%86%E5%B8%83%E5%BC%8F%E6%A8%A1%E5%BC%8F/15231117
  3. https://www.codeproject.com/Articles/524120/A-Java-Chat-Application
  4. https://blog.csdn.net/weixin_41431935/article/details/112846365

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
让这个可爱的宝藏女孩在努力的道路上与你一起同行!
如有转载,请注明出处(如不注明,盗者必究)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568682.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【文章】浅相遇,薄相知,淡相守,终难忘

浅相遇 人生犹如一场戏,在每一个转折点,总有意想不到的邂逅。 有的相遇成歌,注定了在这绻绻红尘中,相携而去。有的转身为念,注定了行色匆匆,独自而行。 其实,上苍是公平的。在为我们关上一扇…

学习python 正则表达式——与你同行!

正则表达式定义 又称为规则表达式,是一个特殊的字符序列,利用事先定义好的一些特定字符以及它们的组合组成一个‘规则’,检查一个字符串是否与这种规则匹配来实现对字符的检索、过滤、匹配、替换。正则表达式需要用到re模块,该模块…

python 编译procto错误处理

运行:python -m grpc_tools.protoc --proto_path. --python_out. --grpc_python_out. helloworld.proto 出现如下错误: helloworld.proto: No such file or directory 解决方案: 解决方法一: cd 到helloworld.proto 的根目录 …

【Python】function、module、Package及import导入方法

计算机程序开发中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里面,这样,这个文件包含的代码就相对…

学习《数据结构》要爬的第一步梯子

小王开始专业课的复习一、数据结构是什么二、数据结构中基本概念和术语2.1数据结构的概念2.2按照不同功能划分逻辑结构2.3存储结构中重点顺序存储举例链式存储举例三、抽象数据类型的表示与实现3.1数据类型3.2抽象数据类型 (ADTs: AbstractData Types)3.…

python gRPC测试helloworld

一、测试helloworld 1、在https://github.com/grpc/grpc 下载example 2、用cmd打开命令行,cd到helloworld的根目录 cd E:\pythoncode\gRPC\grpc-master\grpc-master\examples\python\helloworld 然后运行 python greeter_server.py 3、再用cmd打开另一个命令行…

k52zip shell band 流氓软件总是显示~

小王的烦恼问题Garbage解决办法解决一解决二解决三总结问题 (我都不知道这流氓软件哪里来的,平时也就下点学习资料啥的) 一打开电脑学习给我整蒙了下方工具栏左右两边平白无故整两条杠出来 电脑下方工具栏处右击——》点击工具栏——》取消勾…

Microsoft Visual Studio 无法启动程序“路径啪啦啪啦“. 系统找不到指定的文件。

遇到这个低级错误 点击出现 解决办法 我看了好久,心态都崩了,结果是我两个cpp文件都有main函数,注释掉一个main函数就行了。这种错误可不要再犯了,搞心态。

【Python】Windows下Python3虚拟环境搭建

我们知道python中,有些第三方库的包会有依赖关系,比如某天你想搭建django环境,它可能依赖某个package 2.0,然后过几天你又想要搭建其他环境,这时候可能它也需要同样的包,但是这个包的版本可能不需要那么高&…

pycharm+pyqt5配置

1、打开cmd输入pip3 install PyQt5 2、输入pip3 install PyQt5-tools -i https://pypi.doubanio.com/simple 3、打开pycharm。新建项目点击Setting--》Tools--> (1)添加Qtdesigner (2)添加PyUIC 4、点击 5、打开Qtdesigner。新建一个ui文件。保存在…

立志10天学会C++基础应用—day01

文章目录前言第一天感觉很实用的快捷键一、常识A01打印cHelloWorld.cppA02变量.cppA03常量.cppA04标识符命名规则.cppA05整型.cppA06sizeof的用法.cppA07实型.cppA08字符型.cppA09转义字符.cppA10字符串类型.cppA11布尔类型.cppA12数据的输入.cpp二、算术运算符A13算术运算符.c…

【Python】IDE环境Pycharm运行虚拟环境Django

上一篇文章我们通过举例介绍了如何安装RobotFramework虚拟环境,其实Django环境也可以通过相同办法安装 f: cd F:\python_env python -m venv Django_env F:\python_env\Django_env\Scripts activate pip install Django 这样我们就在虚拟环境下安装了Django&#x…

pycharm导入自己写的模块时,模块下方出现红色波浪线的解决方案

这种情况其实可以不用管,是可以正常运行的; 但是,如果看着不舒服,可以进行以下过程进行设置即可: file->settings->project->project structure->点击项目路径->点击Excluded。然后确定就正常显示了…

立志10天学会C++基础应用—day02 代码清晰易懂 涉及数据结构算法的知识 写完了~我也麻了

哈喽,很高兴又见面啦,一起加油一起学习,欢迎您的关注!https://blog.csdn.net/hanhanwanghaha学习路上有您的关注是我的荣幸,一起进步是我的动力,明天也一起加油啊! 以往链接 立志10天学会C基…

Python3导入自定义模块的3种方式

关于如何自定义一个模块,如果大家不懂的话还请先看下面这篇博文 ↓ http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318447437605e90206e261744c08630a836851f5183000) 模块是个好东西啊,大牛们开源共享许多…

Flask项目的部署详解

哈喽,很高兴又见面啦,一起加油一起学习,欢迎您的关注!https://blog.csdn.net/hanhanwanghaha学习路上有您的关注是我的荣幸,一起进步是我的动力,明天也一起加油啊! 目录宝塔更新Python版本apt安…

【Python】对象、类、元类

龟叔发明了Python,然后集成了一堆概念在这门语言里面,比如:迭代器,装饰器,函数,生成器,类,对象,协程等等。 这些概念对初学者似乎没一个好懂的,不过还有比这更…

JETBRAINS开发工具中Translation翻译插件的使用

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行! 如有转载,请注明出处(如不注明,盗者必究&#xf…

【Python】pdfminer3k模块批量转换本地PDF文件

上一篇文章自己研究了一下如何批量将word或者ppt文件转换为PDF文件,但是有时候我们也想要将pdf文件转换为word或者txt文件,方便复制和处理。本文主要通过调用pdfminer3k模块进行处理。 说明:本文是在Windows10下使用python最新的3.6版本虚拟…

Python读写json文件的简单实现

转载自https://blog.csdn.net/vitaminc4/article/details/77985175 介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C、Java、Ja…