目 录
摘要 I
Abstract II
目 录 III
1 引言 1
2 网络聊天室的简介 2
2.1网络聊天室现状和发展 2
3 完成网络聊天室的技术以及环境 4
3.1 Java的介绍 4
3.2 Java的特点 4
3.3 TCP/IP协议的知识 5
3.4 Socket的介绍 6
3.5 开发工具 6
4 网络聊天室系统的设计 7
4.1项目概述 7
4.2 网络聊天室系统的设计 7
5 系统详细设计 8
5.1 服务器模块的设计 8
5.2 客户端模块的设计 8
6 系统测试 9
6.1 单元测试 9
6.2 系统测试 9
7 总结 10
参考文献 11
致谢 12
网上即时聊天室是广泛使用的一种技术,它的简单方便的沟通方式能够被广大的网上用户所使用。在当今社会,网上聊天是互联网服务重要的一环,有大约43%的用户都会使用网上聊天,是排在第四位。但是有很多人认为网络聊天室就是一种用来娱乐和打发时间的方式,而缺少了实际的价值。就目前来说,能够完成收入的网络聊天室其实并不多。它应该怎么实现自己的商业价值外界并没有过多的关注。
现在,很多企业都会开发属于自己的聊天室,用户通过该网站注册的用户名以及密码登陆到企业的服务器上。在聊天室中,用户之间可以通过输入文字以及各种符号来表达自己的想法,来达到互相之间的沟通。目前,开发一个供用户使用的网络聊天室的技术门槛并不是很高,也不需要大量的资金,国家对于这方面的管制和政策也没有太限制,所以当今社会上聊天室的竞争其实是很激烈的,腾讯,网易,新浪都有属于自己的网络聊天室,但是用户的集中度并不是很好,各家大型网站的网络聊天室都会有自己的忠实用户,彼此之间还没有很明显的差别,各自有各自的优势。
根据某个组织调查公布的中国目前互联网发展报告,目前网络聊天室在商业方面不被看好主要有几点,一:喜爱在网上聊天的人大部分在17~23的年龄之间,他们还没有完全独立,经济上并不是很富裕。二:大部分的网络聊天室的付费内容其实并不多,而且不是强制性的。
很多网站目前将收入目标定位已经参加工作收入较高的白领人士,而对于尚在学校以及初入社会的青少年并没有过多的注意。但是,就目前社会的发展情况来看,青少年的消费能力其实是十分可观的,他们并不想原先社会那样经济十分的拘谨,而是当今的父母都会尽量满足自己子女的需求,无论是经济上还是其他方面。所以,针对性的在网络聊天室加入一些青少年感兴趣的付费内容其实是十分必要的,它能够带来难以想象的收益。现在很多的商家对新型的广告形式并不是很了解,传统广告影响了它们在互联网领域的思考,另一个方面是网络聊天室自身的广告模式不当。就现阶段的情况来看,网络聊天室也要进行转变,不单单是提供即时聊天的服务,而是应该更加多元化,专业化的发展。一方面继续发展自己的优势,将即时聊天做的更加方便,快捷,能够满足不同年龄,不同职业,不同需求的用户。另一方面可以提供用户一些不同于聊天的其他服务,例如近几年十分火的线上课堂,能够让用户足不出户就能学习到不同专业方面的知识,这样的话,收取一部分的费用对于用户来说也是能够接受的。从这几方面来说网络聊天室的商业实力是十分恐怖的。
4 网络聊天室系统的设计
4.1 项目概述
我自己的这个聊天室目前来说还是十分的简单,和市面上那些已经成熟的网络聊天室相比还是差别很大的,但是基本的聊天功能也是能够使用的,整个界面简洁,使用起来也十分方便。
4.2 网络聊天室系统的设计

5 系统详细设计
5.1 服务器模块设计
服务端的功能主要如下:
一:能够开启和关闭服务器。
二:等待着客户端从特殊端口发送的请求。
三:监听的端口并不是固定的,服务端的端口是能够自定义的。
四:能够广播消息向所有连接到服务器的用户。
客户端和服务器之间通过socket套接字进行连接,socket的使用在java当中并不复杂,十分的简单。API提供了一个专门的类来处理,让编写程序变得十分简单。多线程的技术在服务器端得到了充分的体现,服务器能够同时处理来自不同IP的客户端的请求。通过循环调用serversocket对象的方法来监听是否有来自客户端的请求。
5.2 客户端模块设计
客户端的功能主要如下:
一:能够和服务端进行连接。
二:新的用户能够注册账号。
三:通过用户名以及密码完成用户的登陆,连接到聊天室。
四:用户能够在聊天室发送消息。
客户端通过socket与服务器建立连接。通过java对象的流来进行信息的传递,服务器接受请求返回对象,然后返回给客户端信息。不同的客户端的信息在服务端能够进行不同的处理。

import javax.swing.*;import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;/*** 聊天系统登录程序*/
public class Login extends JFrame implements ActionListener {private static final long serialVersionUID = -8965773902056088264L;private JPanel pnlLogin;private JButton btnLogin, btnRegister, btnExit;private JLabel lblServer, lblUserName, lblPassword, lblLogo;private JTextField txtUserName, txtServer;private JPasswordField pwdPassword;private String strServerIp;// 用于将窗口定位private Dimension scrnsize;private Toolkit toolkit = Toolkit.getDefaultToolkit();/*** 构造登陆窗体*/public Login() {super("登录聊天室");pnlLogin = new JPanel();this.getContentPane().add(pnlLogin);lblServer = new JLabel("服务器:");lblUserName = new JLabel("用户名:");lblPassword = new JLabel("口  令:");txtServer = new JTextField(20);txtServer.setText("127.0.0.1");txtUserName = new JTextField(20);pwdPassword = new JPasswordField(20);btnLogin = new JButton("登录");btnLogin.setToolTipText("登录到服务器");btnLogin.setMnemonic('L');btnRegister = new JButton("注册");btnRegister.setToolTipText("注册新用户");btnRegister.setMnemonic('R');btnExit = new JButton("退出");btnExit.setToolTipText("退出系统");btnExit.setMnemonic('X');/************************************************************************ 该布局采用手动布局 setBounds设置组件位置 * setFont设置字体、字型、字号 * setForeground设置文字的颜色 ** setBackground设置背景色 * setOpaque将背景设置为透明*/pnlLogin.setLayout(null); // 组件用手动布局pnlLogin.setBackground(new Color(52, 130, 203));lblServer.setBounds(50, 100, 100, 30);txtServer.setBounds(150, 100, 120, 25);lblUserName.setBounds(50, 130, 100, 30);txtUserName.setBounds(150, 130, 120, 25);lblPassword.setBounds(50, 160, 100, 30);pwdPassword.setBounds(150, 160, 120, 25);btnLogin.setBounds(50, 200, 80, 25);btnRegister.setBounds(130, 200, 80, 25);btnExit.setBounds(210, 200, 80, 25);Font fontstr = new Font("宋体", Font.PLAIN, 12);lblServer.setFont(fontstr);txtServer.setFont(fontstr);lblUserName.setFont(fontstr);txtUserName.setFont(fontstr);lblPassword.setFont(fontstr);pwdPassword.setFont(fontstr);btnLogin.setFont(fontstr);btnRegister.setFont(fontstr);btnExit.setFont(fontstr);lblUserName.setForeground(Color.BLACK);lblPassword.setForeground(Color.BLACK);btnLogin.setBackground(Color.ORANGE);btnRegister.setBackground(Color.ORANGE);btnExit.setBackground(Color.ORANGE);pnlLogin.add(lblServer);pnlLogin.add(txtServer);pnlLogin.add(lblUserName);pnlLogin.add(txtUserName);pnlLogin.add(lblPassword);pnlLogin.add(pwdPassword);pnlLogin.add(btnLogin);pnlLogin.add(btnRegister);pnlLogin.add(btnExit);// 设置背景图片Icon logo1 = new ImageIcon("images\\loginlogo.jpg");lblLogo = new JLabel(logo1);lblLogo.setBounds(0, 0, 340, 66);pnlLogin.add(lblLogo);// 设置登录窗口setResizable(false);setSize(340, 260);setVisible(true);scrnsize = toolkit.getScreenSize();setLocation(scrnsize.width / 2 - this.getWidth() / 2, scrnsize.height/ 2 - this.getHeight() / 2);Image img = toolkit.getImage("images\\appico.jpg");setIconImage(img);// 三个按钮注册监听btnLogin.addActionListener(this);btnRegister.addActionListener(this);btnExit.addActionListener(this);} // 构造方法结束/*** 按钮监听响应*/@SuppressWarnings({ "deprecation", "static-access" })public void actionPerformed(ActionEvent ae) {Object source = ae.getSource();if (source.equals(btnLogin)) {// 判断用户名和密码是否为空if (txtUserName.getText().equals("")|| pwdPassword.getText().equals("")) {JOptionPane op1 = new JOptionPane();op1.showMessageDialog(null, "用户名或密码不能为空");} else {strServerIp = txtServer.getText();login();}}if (source.equals(btnRegister)) {strServerIp = txtServer.getText();this.dispose();new Register(strServerIp);}if (source == btnExit) {System.exit(0);}} // actionPerformed()结束/** * 登录事件响应方法*/@SuppressWarnings("deprecation")public void login() {// 接受客户的详细资料Customer data = new Customer();data.custName = txtUserName.getText();data.custPassword = pwdPassword.getText();try {// 连接到服务器Socket toServer;toServer = new Socket(strServerIp, 1001);ObjectOutputStream streamToServer = new ObjectOutputStream(toServer.getOutputStream());// 写客户详细资料到服务器socketstreamToServer.writeObject((Customer) data);// 读来自服务器socket的登录状态BufferedReader fromServer = new BufferedReader(new InputStreamReader(toServer.getInputStream()));String status = fromServer.readLine();if (status.equals("登录成功")) {new ChatRoom((String) data.custName, strServerIp);this.dispose();// 关闭流对象streamToServer.close();fromServer.close();toServer.close();} else {JOptionPane.showMessageDialog(null, status);// 关闭流对象streamToServer.close();fromServer.close();toServer.close();}} catch (ConnectException e1) {JOptionPane.showMessageDialog(null, "未能建立到指定服务器的连接!");} catch (InvalidClassException e2) {JOptionPane.showMessageDialog(null, "类错误!");} catch (NotSerializableException e3) {JOptionPane.showMessageDialog(null, "对象未序列化!");} catch (IOException e4) {JOptionPane.showMessageDialog(null, "不能写入到指定服务器!");}} // login()结束/*** 启动登陆窗体* @param args*/public static void main(String args[]) {new Login();}} // Class Login结束











基于Java socket的网络聊天室的设计与实现相关推荐

  1. 基于Java Socket通信实现聊天室功能

    目录 1.socket简介 2.架构图 3.服务器端详细过程 4.客户端详细过程 5.完整代码 1.socket简介 socket 翻译为"套接字",是计算机之间基于tcp协议的一 ...

  2. 基于TCP协议的网络聊天室

    创建服务端程序 public class Server {public static void main(String[] args) {new Thread(new ServerTask()).st ...

  3. 基于linux网络聊天室的设计,参考基于linux网络聊天室的设计.doc

    参考基于linux网络聊天室的设计 长沙理工大学<高级操作系统>课程设计报告学 院 计算机与通信工程 专 业 计算机科学与技术 班 级 学 号 学生姓名 指导教师 课程成绩 完成日期 课程 ...

  4. 视频教程-基于Java的WebSocket的聊天室-Java

    基于Java的WebSocket的聊天室 多年 Java 企业级应用开发工作经验,曾参与中国人寿.华夏人寿.泰康人寿.信达财险等保险行业内部业务管理系统以及线上在线产品的开发:参与中国人民银行.清华大 ...

  5. 基于Python的多人聊天室的设计与实现

    基于Python的多人聊天室的设计与实现 摘要  本文介绍了基于即时通讯的Python实现web版多人聊天室的设计和实现.这个系统利用了多种先进的技术,如Django.Channels.WebSock ...

  6. java聊天程序论文_【基于java的仿qq聊天程序的设计与实现论文最终版材料】

    基于java的仿qq聊天程序的设计与实现(论文)(最终版) <基于java的仿qq聊天程序的设计与实现(论文).doc>由会员分享,可免费在线阅读全文,更多与<基于java的仿qq聊 ...

  7. java毕业设计——基于java+Socket+sqlserver的远程监控系统软件设计与实现(毕业论文+程序源码)——远程监控系统

    基于java+Socket+sqlserver的远程监控系统软件设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Socket+sqlserver的远程监控系统软件设计与实现,文章 ...

  8. 【java毕业设计】基于java+Socket+Eclipse的坦克大战游戏设计与实现(毕业论文+程序源码)——坦克大战游戏

    基于java+Socket+Eclipse的坦克大战游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Socket+Eclipse的坦克大战游戏设计与实现,文章末尾附有本毕业设 ...

  9. 使用socket实现基于select模型的网络聊天室

    假期闲来无事,便写了个小小的网络聊天室程序.以前一直都是写MFC的有界面的程序,时间长了,便失去了兴趣,感觉有些东西经过MFC的封装,反而失去了意义,让人学不到东西,所以,丢开MFC那层的东西,直接使 ...

最新文章

  1. 安徽大学计算机科学与技术复试线,安徽大学计算机考研报录比及分数线
  2. 基片集成波导原理_图解分析:华为1:8 PLC分光器及石英基板集成波导光功率分配器...
  3. 清理 zabbix 历史数据, 缩减 mysql 空间
  4. 一道有意思的数据库题
  5. 你对Java网络编程了解的如何?Java NIO 网络编程 | Netty前期知识(二)
  6. MySQL学习笔记03【数据库表的CRUD操作、数据库表中记录的基本操作、客户端图形化界面工具SQLyog】
  7. Javascrip—拷贝对象(13)
  8. 计算机页面设置代码,计算机二级考试Access辅导:页面设置模块代码分享
  9. java map取值_Java Set接口 Map 与枚举
  10. 【AI视野·今日NLP 自然语言处理论文速览 第十五期】Fri, 25 Jun 2021
  11. CSS具有最高优先级 !important
  12. 科发财务凭证登陆出现错误:40002
  13. as上的git到码云操作_高校版News||码云联合实训邦发布软件工程在线实训教程
  14. 成都睿铂M6Pros近景摄影测量:西安古城墙数字化建设应用介绍
  15. C Tricks(十)—— str2int vs int2str
  16. Linux查看安装了哪些软件
  17. Java对正则表达式的支持(二)
  18. java连oracle报17002,帮忙给看一个java访问oracle的异常
  19. 基于Android P,自定义Android开机动画的方法
  20. 多线程-生产者消费者模式-CopyOnWriteArrayList索引越界问题

热门文章

  1. 银行数字化运维转型应对之道
  2. Mysql引擎之MyISAM引擎
  3. 为什么c语言中会引入ASCII,C语言中ASCII码是什么意思?
  4. 宏病毒组(四)|病毒注释软件介绍
  5. 利用c语言结构体实现通讯录
  6. 0000-0-1-C语言可以做什么C语言可以干啥C++语言可以做什么C++语言可以干啥C语言就业前景C++就业前景
  7. Word文档中插入的图片显示不全、嵌入式图片显示不全解决方法,仅设置图片为单倍行距方法
  8. 程序员副业接单做私活避坑指南
  9. 哈佛《幸福课》 第4课 积极的环境能改变人
  10. mysql组合索引,abc索引命中