一、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服务器和文件服务器。用户通过浏览器访问服务器,以进行信息浏览、文件传输和电子邮件服务。
两者区别如下:
一、指代不同
-
C/S:就是指客户端/服务器模式。是计算机软件协同工作的一种模式,采取两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。
-
B/S:是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。
二、原理不同
-
C/S:客户端运行应用程序,服务器端运行服务程序。应用程序向服务程序发出一个应用程序。
-
B/S:统一客户端,将系统功能实现的核心部分集中到服务器,简化系统的开发、维护和使用。只需在客户机上安装一个浏览器,如NetscapeNavigator或InternetExplorer,服务器就会安装SQLServer、Oracle、MYSQL等数据库。浏览器通过Web服务器与数据库交互。
三、优势不同
-
C/S:可以充分发挥客户端PC的处理能力,很多工作经过客户端处理后可以提交给服务器。相应的优点是客户端响应速度快。
-
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(服务器应用程序)。
四、特征
- 同时处理多个用户
- 支持公共和私人消息
- 用户注册和登录可用
- 支持文件传输
五、jServer
jServer主要有两个类分别处理连接和消息:
在启动时SocketServer单独运行在一个线程中,它会监听是否有客户端连接服务器,一旦发现客户端jServer就会创建一个单独的线程去运行ServerThread。
ServerThread创建后就会持续的监听来自客户端的消息,并将消息交由SocketServer处理。同样,它支持将来自客户端的消息转发到其他客户端。jServer将客户端用户名和密码保存在data.xml中,以支持用户注册功能。
// In ServerThread read the incoming message and hand it to SocketServer
Message msg = (Message) streamIn.readObject();
server.handle(ID, msg);
.......
// In SocketServer process the messages based on their type
public 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。收件人然后执行以下操作:
- 接收方以类型为消息的形式发送其答复 upload_res
- 如果请求被接受,那么收件人将打开一个新端口
- 为了获得肯定的答复,收件人的IP地址和端口号将被发回。
- 发件人在收到肯定答复后将连接到此套接字并开始文件上传
这种方法的优点是客户端可以同时聊天和传输文件。与消息不同,文件不会通过jServer。
// On recipient side, start a new thread for download
Download 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
如图:
解决方式:选择最上面一个,这里可以参考你自己当前已经可以运行的项目,选一样的就好了。
最后再重启下项目
参考:
- https://zhidao.baidu.com/question/569834641.html
- https://baike.baidu.com/item/C/S%E5%88%86%E5%B8%83%E5%BC%8F%E6%A8%A1%E5%BC%8F/15231117
- https://www.codeproject.com/Articles/524120/A-Java-Chat-Application
- https://blog.csdn.net/weixin_41431935/article/details/112846365
https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
让这个可爱的宝藏女孩在努力的道路上与你一起同行!
如有转载,请注明出处(如不注明,盗者必究)
转载:https://blog.csdn.net/hanhanwanghaha/article/details/115444646