版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2020/7/9,1,C/S型简单聊天室程序简介,2020/7/9,2,展示内容,2020/7/9,3,1. 需求分析 Requirement,功能性需求分析 (Functional Requirements): 1.There should be a server and at least one client; 2.Clients could send message and every client could receive the message; 3.Server allows multiusers to chat online at the same time; 4.The co
2、mmunication is in real time between the multiple clients if any. 非功能性需求分析 (Non-functional Requirements): 1.Use java sockets to complete the program; 2.The communication should be using TCP.,2020/7/9,4,Client B,2. 程序设计 Design,Client A,Server,Server启动,建Socket,Client请求与Server建立连接,Client请求与Server建立连接,Se
3、rver接受Client请求,Server接受Client请求,Client向Server发送给所有Client的消息,Server将Client发送的信息转发给所有已建立连接的Client,Server将Client发送的信息转发给所有已建立连接的Client,Client提出Close请求,Client提出Close请求,Close,Close,2. 程序设计 Design,来呀,我要连到聊天服务器,嗯,进来了,Client A,Client B,Server 来宾A,Server 来宾A, 来宾B,Client A,Server 收到信息,打铃了,上课了, 大家快来啊,Client A,
4、Server 信息分发给所有来宾,Client B,打铃了,上课了, 大家快来啊,1. 客户端连接到服务器; 2. 服务器建立连接并把客户端驾到来宾清单中; 3. 另一个用户连接上来; 4. 用户A送出信息到聊天服务器上; 5. 服务器将信息送给所有来宾。,Server,我要连上你了,Client A,Server 等待用户请求,形象的描述 O(_)O,2. 程序设计 Design,Public class VerySimpleChatServer public static void main (String args) new VerySimpleChatServer().go(); pu
5、blic void go() try while (true) Thread t = new Thread (new ClientHandler (clientSocket); t.start(); public class ClientHandler implements Runnable public ClientHandler (Socket clientSocket) public void run() try tellEveryone (message); public void tellEveryone (String message) ,2-1 Server端代码框架,2. 程序
6、设计 Design,Public class SimpleChatClient public static void main (String args) client.go(); public void go() sendButton.addActionListener (new SendButtonListener (); setUpNetworking(); Thread readerThread = new Threas (new IncomingReader (); readerThread.start(); public class SendButtonListener imple
7、ments ActionListener public void setUpNetworking() public class IncomingReader implements Runnable ,2-2 Client端代码框架,2020/7/9,8,3. 程序实现 Implementation,Client B,Client A,Server,Server启动,建Socket,Client请求与Server建立连接,Client请求与Server建立连接,Server接受Client请求,Server接受Client请求,Client向Server发送给所有Client的消息,Server
8、将Client发送的信息转发给所有已建立连接的Client,Server将Client发送的信息转发给所有已建立连接的Client,Client提出Close请求,Client提出Close请求,Close,Close,2020/7/9,9,3. 程序实现 Implementation,Client B,Client A,Server,Server启动,建Socket,Client请求与Server建立连接,Client请求与Server建立连接,Server接受Client请求,Server接受Client请求,Client向Server发送给所有Client的消息,Server将Clien
9、t发送的信息转发给所有已建立连接的Client,Server将Client发送的信息转发给所有已建立连接的Client,Client提出Close请求,Client提出Close请求,Close,Close,Public void go() ServerSocket serverSock = new ServerSocket (5000); /设定服务器端口 5000为与Chat Room的Client建立连接用的Well-known Port(熟知端口) ,2020/7/9,10,3. 程序实现 Implementation,Client B,Client A,Server,Server启动
10、,建Socket,Client请求与Server建立连接,Client请求与Server建立连接,Server接受Client请求,Server接受Client请求,Client向Server发送给所有Client的消息,Server将Client发送的信息转发给所有已建立连接的Client,Server将Client发送的信息转发给所有已建立连接的Client,Client提出Close请求,Client提出Close请求,Close,Close,2020/7/9,11,3. 程序实现 Implementation,Client B,Client A,Server,Server启动,建Soc
11、ket,Client请求与Server建立连接,Client请求与Server建立连接,Server接受Client请求,Server接受Client请求,Client向Server发送给所有Client的消息,Server将Client发送的信息转发给所有已建立连接的Client,Server将Client发送的信息转发给所有已建立连接的Client,Client提出Close请求,Client提出Close请求,Close,Close,Private void setUpNetworking() sock = new Socket (“127.0.0.1”, 5000); / Client
12、请求与Server建立连接 ,2020/7/9,12,3. 程序实现 Implementation,Client B,Client A,Server,Server启动,建Socket,Client请求与Server建立连接,Client请求与Server建立连接,Server接受Client请求,Server接受Client请求,Client向Server发送给所有Client的消息,Server将Client发送的信息转发给所有已建立连接的Client,Server将Client发送的信息转发给所有已建立连接的Client,Client提出Close请求,Client提出Close请求,Cl
13、ose,Close,2020/7/9,13,3. 程序实现 Implementation,Client B,Client A,Server,Server启动,建Socket,Client请求与Server建立连接,Client请求与Server建立连接,Server接受Client请求,Server接受Client请求,Client向Server发送给所有Client的消息,Server将Client发送的信息转发给所有已建立连接的Client,Server将Client发送的信息转发给所有已建立连接的Client,Client提出Close请求,Client提出Close请求,Close,C
14、lose,Public void go() Socket clientSocket = serverSock.accept(); / Server同意Client建立连接的请求 ,2020/7/9,14,3. 程序实现 Implementation,Client B,Client A,Server,Server启动,建Socket,Client请求与Server建立连接,Client请求与Server建立连接,Server接受Client请求,Server接受Client请求,Client向Server发送给所有Client的消息,Server将Client发送的信息转发给所有已建立连接的Cl
15、ient,Server将Client发送的信息转发给所有已建立连接的Client,Client提出Close请求,Client提出Close请求,Close,Close,2020/7/9,15,3. 程序实现 Implementation,Client B,Client A,Server,Server启动,建Socket,Client请求与Server建立连接,Client请求与Server建立连接,Server接受Client请求,Server接受Client请求,Client向Server发送给所有Client的消息,Server将Client发送的信息转发给所有已建立连接的Client,
16、Server将Client发送的信息转发给所有已建立连接的Client,Client提出Close请求,Client提出Close请求,Close,Close,要点: 数据的输入输出的实现; 多线程的实现。,3. 程序实现 Implementation,3-1 以Client为例的数据的输出的实现,1. 对服务器建立Socket链接: Socket chatSocket = new Socket (“127.0.0.1”, 5000); 2. 建立链接到Socket的PrintWriter: PrintWriter writer = new PrintWriter(chatSocket.get
17、OutputStream(); /将Writer中的字符串转换成0,1的串流的形式,传给Socket的outputStream中 3. 写入数据: writer.println(“message to send”);,“message”,010111001,Server 接收信息目的地,链接,写上服务器的字节 Socket输出,字符 PrintWriter,Client 发送信息的来源,聊天服务器程序,3. 程序实现 Implementation,3-2 以Client为例的数据的输入的实现,1. 建立对服务器的Socket链接: Socket chatSocket = new Socket
18、(“127.0.0.1”, 5000); 2. 建立链接到Socket上底层输入串流的InputStreamReader: InputStreamReader stream = new InputStreamReader (chatSocket.getInputStream(); /从Socket中取得输入串流0,1,经过reader转换成可是别的字符串形式 3. 建立BufferedReader来读取: BufferedReader reader = new BufferedReader (stream); String message = reader.readLine();,Buffer
19、ed Characters,Characters,011001001,Server 发送信息的来源,来自服务器的字节 Socket输入流,Data on the Server,链接,链接,转换成字符 InputStreamReader,缓冲区的字符 BufferedReader,Client 接收信息目的地,3. 程序实现 Implementation,3-3 Server端多线程的实现,Public void go() Thread t = new Thread (new ClientHandler (clientSocket); t.start(); Public class ClientHandler implements Runnable public ClientHandler (Socket clientSocket) try sock = clientSocket; ImputStreamReader isReader = new InputStreamReader (sock.getInputStream); reader = new BufferedReader (isReader); catch (Exception ex) public void run () try while (message = rea
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026四川乐山市犍为县信访局招聘心连心服务人员2人笔试模拟试题及答案详解
- 2026河南郑州市惠济区迎宾路社区卫生服务中心招聘3人笔试模拟试题及答案详解
- 玩具产品包装设计协议2026年修订
- 2026浙江嘉兴市世纪交通工程咨询监理有限公司项目化及生产操作一线岗位招聘14人笔试备考题库及答案详解
- 成本领先型广告代理合作协议2026
- 信息技术外包2026年IT支持服务合同
- 赣州市2026年“十万英才聚赣南”事业单位招聘高层次急需紧缺专业技术人才(武汉站)笔试参考题库及答案详解
- 关于《弱胶结地层巷道与应力计锚杆(索)支护技术规范》的解读
- 2026年合肥滨湖产业发展集团有限公司子公司招聘笔试备考题库及答案详解
- 2026重庆安全技术职业学院劳动合同制员工招聘36人(第一批)笔试参考题库及答案详解
- 2025年高考(福建卷)物理试题(学生版+解析版)
- 发型师培训课件
- 2026版《学军中学校本册》高中数学回归教材
- 2026广州水投集团招聘面试题及答案
- 2025贵州贵阳市某事业单位工作人员招聘(公共基础知识)综合能力测试题带答案解析
- 【《20万吨年产量的正丁醇生产工艺设计及Aspen仿真研究》12000字】
- DB13∕T 5308-2020 烧伤浸浴护理规范
- 【MOOC】《宋词经典》(浙江大学)章节期末慕课答案
- 工程质保及售后服务方案(3篇)
- 2025-2030中国煤矿行业发展分析及投资前景与战略规划研究报告
- 世界环境日知识培训课件
评论
0/150
提交评论