版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 8/8Java项目(Chat即时聊天系统) Java程序设计实训开发Chat即时聊天系统 一、开放实验项目 Java项目开发Chat即时聊天系统 二、开放实验时间 201X.XX.XX201X.XX.XX 三、开放实验地点 专业微机室二(B-4009) 四、开放实验目的 综合利用JDK、Eclipse开发环境,实现中小型项目的设计。 本系统采用C/S架构,基于TCP协议实现数据在服务器和客户端之间进行传输,实现 聊天信息的存储。 通过“Chat即时聊天系统”的设计过程,深刻了解掌握面向对象程序设计语言Java的 核心概念和特性;了解编程技术知识,学会处理异常状况,深入了解Java数据库功能,
2、熟 练掌握图形界面的操作技术,掌握Java应用软件的开发环境和开发过程;灵活选择程序设 计思想,在编写过程中进一步体会Java与其它编程语言的不同之处,分析出Java的优点和 先进之处。同时,使学生能够深入的了解软件项目开发的流程和步骤,掌握每一部分的设计 和实现方法,以及充分利用现有的软件工程设计工具来完成项目的设计。 五、开放实验内容 1概要设计 采用Socket类建立套接字实现客户端与服务端的通讯。 总体数据流图 服务端数据流图 2.设计原理 (1)利用多线程实现多客户机制。服务器总是在指定的端口上监听是否有客户请求,一旦监听到客户请求,服务器就会启动一个专门的服务线程来响应该客户的请求
3、,而服务器本身在启动完线程之后马上又进入监听状态,等待下一个客户的到来。 (2).服务器在接受客户方的请求后,立即高度一个线程以处理服务器与客户方之间的交互,主程序则返回继续监听端口,等待下一个客户的连接请求。前一个线程在完成相应的交互过程后自动退出,连接也将自动关闭。 (3).在服务器的程序中首先创建单个Server Socket,并调用accept()来等候一个新连接,一旦accept()返回,就取得获得结果的Socket,并用它新建 一个线程,令其只为那个特定的客户提供服务。然后再调用accept(),等候下一个新的连接请求。 3.客户端设计 (1)、数据流图 . 定义Client类控制
4、客户端,用于实现客户端的接收信息与发送信息等操作(2)、客户端代码 import http:/./doc/62eecc5310661ed9ac51f323.html .*; import java.io.*; public class Client extends Thread Socket skt; / 用于客户端的连接 InetAddress host; / 主机地址 int port; / 端口号 BufferedReader theInputStream; PrintStream theOutputStream; String readin; Face chat; public Cli
5、ent(String ip, int p, Face chat) try host = InetAddress.getByName(ip); / 获取IP地址 port = p; / 获取端口号 this.chat = chat; catch (IOException e) chat.ta.append(e.toString(); public void run() try chat.ta.append(准备连线,稍后!); skt = new Socket(host, port); / 新建Socket对象 chat.ta.append(成功n); / 缓冲区末尾添加字符串 theInput
6、Stream = new BufferedReader(new InputStreamReader(skt.getInputStream(); theOutputStream = new PrintStream(skt.getOutputStream(); while (true) readin = theInputStream.readLine(); chat.ta.append(readin + n); catch (SocketException e) chat.ta.append(未连上!n); chat.clientBtn.setEnabled(true); chat.serverB
7、tn.setEnabled(true); chat.tfaddress.setEnabled(true); chat.tfport.setEnabled(true); try skt.close(); catch (IOException err) chat.ta.append(err.toString(); catch (IOException e) chat.ta.append(e.toString(); public void dataout(String data) theOutputStream.println(data); 4、服务端的设计 (1)、数据流图 定义Server类控制
8、服务端,用于实现服务端的接收信息和发送信息等操作(2)、服务端代码 import java.awt.*; import http:/./doc/62eecc5310661ed9ac51f323.html .*; import java.io.*; public class Server extends Thread ServerSocket skt; / ServerSocket类监听进入的连接,为每个新的连接产生一个Socket对象 Socket Client =new Socket10; Socket Client1=null; int i = 0; TextArea in; int po
9、rt,k=0,l=0; PrintStream theOutputStream; Face chat; public Server(int port, Face chat) try this.port = port; skt = new ServerSocket(port); this.chat = chat; catch (IOException e) chat.ta.append(e.toString(); public void run() chat.ta.append(等待连线); while (true) try Clientk = skt.accept(); /当有客户端连接时就新
10、建一个子线程 if (i 2) ServerThread server = new ServerThread10; serverk= new ServerThread(Clientk, this.chat, i); l=server.length; serverk.start(); chat.ta.append(客户端+ Clientk.getInetAddress() + 已连线n); /for(int j=0;jserver.length;j+) theOutputStream = new PrintStream(serverk.getClient().getOutputStream();
11、 i = serverk.getI(); k+; else /theOutputStream = new PrintStream(null); catch (SocketException e) catch (IOException e) chat.ta.append(e.toString(); public void dataout(String data) /for(int j=0;jl;j+) theOutputStream.println(data); class ServerThread extends Thread ServerSocket skt; Socket Client;
12、TextArea in; int port,i; BufferedReader theInputStream; PrintStream theOutputStream; String readin; Face chat; public ServerThread(Socket s, Face chat, int i) this.i = +i; Client = s; this.chat = chat; public int getI() return this.i; public Socket getClient() return this.Client; public void run() t
13、ry theInputStream = new BufferedReader(new InputStreamReader(Client.getInputStream(); theOutputStream = new PrintStream(Client.getOutputStream(); while (true) readin = theInputStream.readLine(); chat.ta.append(readin + n); catch (SocketException e) chat.ta.append(连线中断!n); / 设置组件可用性 chat.clientBtn.se
14、tEnabled(true); chat.serverBtn.setEnabled(true); chat.tfaddress.setEnabled(true); chat.tfport.setEnabled(true); try i -; skt.close(); Client.close(); catch (IOException err) chat.ta.append(err.toString(); catch (IOException e) chat.ta.append(e.toString(); public void dataout(String data) theOutputSt
15、ream.println(data); 5、聊天界面的设计 (1)、通过调用Face类对界面进行管理设计,运用Button、TextArea、Label等组件,然后通过actionPerformed触发事件来完成操作。 (2)、界面代码 import java.awt.*; import java.awt.event.*; public class Face extends Frame private static final long serialVersionUID = 1L; Button clientBtn, serverBtn; TextArea ta; TextField tfad
16、dress, tfport, tftype,tfname; Label lbl1,lbl2,lbl3,lbl4; int port; Client client; Server server; boolean iamserver; static Face frm; public Face() /实例化组件 clientBtn = new Button(客户端); serverBtn = new Button(服务器); ta = new TextArea(, 10, 50,TextArea.SCROLLBARS_BOTH); lbl1 = new Label(IP地址:); tfaddress
17、 = new TextField(, 10); lbl2 = new Label(端口:); tfport = new TextField(8888); lbl3 = new Label(发送内容:); tftype = new TextField(25); lbl4=new Label(昵称:); tfname=new TextField(30); tftype.addKeyListener(new TFListener(); ta.setEditable(false); /向容器中加入以上组件 setLayout(new FlowLayout(); add(lbl1); add(tfadd
18、ress);add(lbl2);add(tfport);add(serverBtn); add(clientBtn);add(lbl4);add(tfname);add(ta);add(lbl3);add(tftype); /设置格式 setLocation(350, 250); /窗口显示在屏幕的位置坐标 setSize(400, 320); /设置窗体大小 setTitle(图形界面的聊天程序); this.setVisible(true); /设置窗体可见 clientBtn.addActionListener(new ActionListener() public void actio
19、nPerformed(ActionEvent e) port = Integer.parseInt(tfport.getText(); client = new Client(tfaddress.getText(), port, frm); client.start(); tfaddress.setEnabled(false); tfport.setEnabled(false); serverBtn.setEnabled(false); clientBtn.setEnabled(false); tfname.setText(客户端); ); /客户端事件响应 serverBtn.addActi
20、onListener(new ActionListener() public void actionPerformed(ActionEvent e) port = Integer.parseInt(tfport.getText(); server = new Server(port, frm); server.start(); iamserver = true; tfaddress.setText(成为服务器); tfaddress.setEnabled(false); tfport.setEnabled(false); serverBtn.setEnabled(false); clientBtn.setEnabled(false); tfname.setText(服务器); ); /服务器端事件响应 addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); /窗口事件响应 public static void main(String args) /主方法 frm = new Face(); private c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单病种管理制度培训课件
- 2026年吉祥航空社会招聘热启机务签派海外销售等8大岗位全国+海外多地点可选备考题库有答案详解
- 2026年四川九洲电器集团有限责任公司关于招聘市场开发的备考题库带答案详解
- 安全问题整改培训资料课件
- 2026年中移铁通临沧分公司招聘12人备考题库及一套答案详解
- 2026年厦门市集美区实验幼儿园非在编教辅招聘备考题库及一套参考答案详解
- 2026年中远海运物流供应链有限公司青岛分公司招聘备考题库及一套答案详解
- 2026年安徽皖信人力资源管理有限公司招聘某银行项目经理岗位备考题库及参考答案详解
- 2026年项目沟通策略合同
- 2026年工程物资采购合同
- 2025年秋季第一学期学校语文教研组工作总结(二):携手教研之舟漫溯语文之河【课件】
- 初中历史区域国别研究教学与跨学科整合课题报告教学研究课题报告
- 档案工作责任追责制度
- 2024-2025学年重庆市南开中学七年级(上)期末道德与法治试卷(含答案)
- 【语文】广东省深圳市宝安区宝城小学二年级上册期末复习试题(含答案)
- 2025年中国储备粮管理集团有限公司招聘笔试考点考试题库及答案
- 八年级期末考试多项细目表语文
- 综合管廊城市地下管廊专项施工方案
- GB/T 25974.3-2010煤矿用液压支架第3部分:液压控制系统及阀
- 中职升学考试 高职单招语文必考知识点
- 维修大队采气树维护保养手册
评论
0/150
提交评论