基于Java的简单网络聊天室编程

基于Java的简单网络聊天室编程
基于Java的简单网络聊天室编程

基于Java的简单网络聊天室编程

摘要:当前是信息网络得到飞速发展的时代,尤其是计算机和通信技术的发展和结合,深深的影响着我们的生活、学习和工作方式。其中,网络聊天工具成为人们日常交流的一种重要工具,它成本低,通信速度快,方便信息交流和资料的传递。本次开发的网络聊天系统是基于开放的Java应用程序设计的,系统采用客户机/服务器的架构模式,由客户端程序和服务器程序外加服务器端,用于存放客户数据的数据库组成,使用Java提供的Socket类以及Java的多线程功能,在不同的端口上部署各类服务,可以在单个程序中同时运行多个不同进程,而客户端通过Socket发送信息给服务器,从而实现多点对多点的聊天。

关键字:Java,交互性,Socket类,多线程

Zhao cheng-yu

Abstract:The rapid development of the information networks, especially the development and integration of computer and communication technologies, has deeply affected our lives, learning and work. Among them, the Internet chat tool becomes an important tool for daily communication, because it is low cost, fast communication and facilitat einformation exchange and data transmission. The development of the Internet chat system is designed based on open Java application. It can be dynamic, real-time information transfer and efficient interaction so that it can deal more effectively with customer requests, and is easy to maintain and update. The system will use the client / server architecture model, which includes the client program and server programs plus server-side database used to store customer data. By using the socket class provided by java and java multi-threading capability,we can deploy various services on a different port and a number of different processes can be run simultaneously in a single program. Clients send information to the server through the socket in order to achieve multi-point-to-multipoint chat.

Key words: Java, interactivity, the Socket class, multi-threaded

1. 引言

现在互联网越来越发达,网络聊天工具成为人们日常交流的一种重要工具,它成本低,通信速度快,方便信息交流和资料的传递,所以开发一个界面友好、易于操作的聊天工具能较好地解决电话的单线程通信以及费用高昂等问题。随着网络普及程度的提高,人们对于通信软件的要求越来越趋于简单操作,同步实时,以及更简单的网络传输。

本次开发的网络聊天系统是基于开放的Java应用程序设计的,能动态、实时地完成信息的传递,且具有高效的交互性,能更有效地处理客户请求,易于维护和更新。系统分为两部分:客户端和服务器端。客户端主要实现新建用户、用户登录、消息的收发功能以及群聊功能,客户端申请与服务器端建立连接,当客户端与服务器端建立连接通道后就可以像服务器端发送新建用户信息和登录信息,以及好友管理、信息编辑、发送和接收的功能;服务器端主要完成建立连接、数据库操作和监听客户三大功能,服务器端建立一个Server Socket 的连接,不断侦听客户端是否建立连接或断开连接,如果有客户端申请连接就启动线程与客户端建立连接并按照客户端的请求对数据库进行操作并把结果返回给客户端。

2.JAVA语言概况

Java是一个由Sun公司开发的新一代高级编程语言。它可在各式各样不同机器、不同操作平台的网络环境中开发软件。不论你使用的是哪种WEB浏览器,哪种计算机,哪种操作系统,只要WEB浏览器上面注明了“支持Java”,并且装有JAVA控件,你就可以看到生动的主页。Java正在逐步成为Internet应用中最主要的开发语言,它彻底改变了软件开发模式,带来了自PC机以来又一次革命,为飞速发展的网络世界增添了新的动力。总而言之java 语言有简单、面向对象、分布性、安全性、多线程等特点。

3. TCP/IP

3.1 TCP/IP协议的特点

TCP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议/网际协议的缩写, TCP/IP是当今网络互联的核心协议。TCP/IP协议的体系结构共有四个层次,即应用层、传输层、网络互联层和网络接口层。

IP协议的作用:第一,它是网络层的协议,提供互联网上数据传输的统一格式。第二,提供不可靠的无连接的服务。第三,定义了互联网上的传输数据的基本单元,提供了供路由

选择的信息,没有差错校验和处理的机制。

TCP/IP协议具有以下特点:

(1)协议标准具有开放性,其独立于特定的计算机硬件及操作系统,可以免费使用。(2)统一分配网络地址,使得每个TCP/IP 设备在网络中都具有唯一的IP地址。

(3)实现了高层协议的标准化,能为用户提供多种可靠的服务。

TCP/IP协议进行传输数据传输的过程:

应用程序为了传输数据会调用TCP,将数据和对应的参数传给TCP,将TCP 数据包封装在IP包内,通过网络送给目的TCP。接收方TCP在接收到数据后通知上层应用程序,TCP 将保证接收数据的正确性。TCP调用IP接口,向TCP提供所有TCP需要的服务。

端口号:

有的时候,一个IP地址不能完整的标识一台服务器,这是应为一台物理性的计算机同时运行着多个应用程序,这就需要我们来区别同一台机子上的不同的服务,所以就在传输层和应用层上设置接口,就是端口。端口实际是一个16位长的地址,他的范围是0~65535之间,其中0~1023是熟知端口,主要是给提供服务的应用程序使用,这些端口是所有应用进程都只道的,1024~65535为一般端口,也称动态端口、连接端口,用来随时分配要求通信的客户端应用程序。在数据传输过程中,各种服务器不断的检测分配给他的端口,一边发现要求和他通信的客户端。

3.2 Socket介绍

Socket,简称套接字,用于实现网络上客户和服务器之间的连接。也就是说网络上两个或两个以上双工方式通信的进程之间总有一个连接,这个连接的端点成为套接字,套接字是在比较低的层次上通信的。

具体的说:一个服务器应用程序一般侦听一个特定的端口等待客户端的连接请求,当一个连接请求到达时,客户端和服武器端建立一个通信连接,在连接过程中,客户端被分配一个本地端口与一个Socket建立连接,客户端通过写Socket来通知服务器,以读Socket中的信息,类似的服务器也获得一个本地端口,它需要一个新的端口号来侦听原始端口上的其他连接请求。服务器也通过它的本地端口连接一个socket,通过读写和客户端通信。Socket程序的工作过程:

(1)建立Socket连接:在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接通道。

(2)数据通信:利用虚拟连接通道传送数据信息进行通道。

(3)关闭:通信结束时,再将所建的虚拟连接拆除。

具体如下:

图1 Socket套接字原理图

3.3多线程思想

多个客户同时与单个服务器连接时非常常见的。可以使用线程处理服务器上多个客户的同步问题。

while (true) {

Socket socket = serverSocket.accept();

Thread thread = new ThreadClass(socket);

thread.start();

}

服务器套接字可以有多个连接。While循环的每次迭代创建一个新的连接。

4.工程化思想分析

4.1基本功能需求

(1)聊天

私聊:私聊就是两个之间聊天,即一对一。

群聊:就是多人一起聊天,即一对多。

(2)管理员踢人的管理

(3)注册用户

4.2系统设计

(1)用户注册

服务器收到用户的注册请求,便开始接受用户传递的信息,用户的名称,密码,接受完毕后,便通过后台数据库连接,然后向数据库添加记录。客户收到服务器返回的信息后,便打开主登陆窗口。

(2)登陆

在客户端,用户输入其用户名和密码,然后建立与服务器的连接,告诉服务器我要登录,服务器收到后,开始读取数据库,然后与用户输入的信息比较,如果成功,便打开主程序窗口。进入相应的聊天室,看看到底有多少人在聊天室里,便可以私聊或则群聊。

(3)私聊

私聊就是两个聊天。客户端首先发送消息到服务器端,服务器端根据发送人信息和接收者信息来转发。

(4)群聊

群聊,就是多人一起聊天。过程与私聊差不多。唯一的不同就是服务器会将信息转发给指定的一到多个成员。

(5)管理员踢人

管理员踢人的功能相当于管理员看到某个人不符合规定变现,扰乱聊天次序,可以行使权限的功能拥有踢人的功能。

5. 功能模块实现

5.1数据库设计

public class LoginFrame extends javax.swing.JFrame implements ActionListener {

private javax.swing.JButton jButtonLogin;

private javax.swing.JButton jButtonRegister;

private javax.swing.JLabel jLabel1;

private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel3;

private javax.swing.JPasswordField jPasswordFieldPw;

private javax.swing.JTextField jTextFieldName;

private JPanel jPanel1;

private JButton jButtonManage;

public LoginFrame() {

try {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName( ));

} catch (Exception e) {

e.printStackTrace();

}

initComponents();

}

//初始化所有控件

private void initComponents() {

jPanel1 = new JPanel();

jTextFieldName = new javax.swing.JTextField();

jPasswordFieldPw = new javax.swing.JPasswordField();

jButtonLogin = new javax.swing.JButton("登陆");

jButtonRegister = new javax.swing.JButton("注册");

jLabel1 = new javax.swing.JLabel();

jLabel2 = new javax.swing.JLabel();

jLabel3 = new javax.swing.JLabel();

getContentPane().setLayout(null);

getContentPane().add(jLabel1);

jLabel1.setText("聊天系统");

//设置label中的字体和大小,并用粗体显示

jLabel1.setFont(new Font("", Font.BOLD, 30));

jLabel1.setBounds(200, 100, 400, 50);

getContentPane().add(jPanel1);

jPanel1.setLayout(null);

jPanel1.add(jLabel2);

jLabel2.setText("用户名:");

jLabel2.setPreferredSize(new Dimension(50, 30));

jLabel2.setBounds(100, 150, 100, 30);

jPanel1.add(jTextFieldName);

jTextFieldName.setBounds(200, 150, 150, 30);

jLabel3.setText("密码:");

jLabel3.setBounds(100, 200, 100, 30);

jPanel1.add(jLabel3);

jPanel1.add(jPasswordFieldPw);

jPasswordFieldPw.setBounds(200, 200, 150, 30);

jPanel1.add(jButtonLogin);

jButtonLogin.setBounds(100, 250, 80, 20);

jButtonLogin.addActionListener(this);

jPanel1.add(jButtonRegister);

jButtonRegister.addActionListener(this);

jButtonRegister.setBounds(200, 250, 80, 20);

jButtonManage = new JButton("管理");

jButtonManage.setBounds(300, 250, 80, 20);

jButtonManage.addActionListener(this);

jPanel1.add(jButtonManage);

jPanel1.setBounds(0, 0, 500, 500);

jPanel1.setVisible(true);

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOS E);

Dimension screenSize =

Toolkit.getDefaultToolkit().getScreenSize();

//把窗口放在屏幕中间

this.setPreferredSize(new Dimension(500, 500));

this.setBounds(screenSize.width/2-250, screenSize.height/2-250, 500, 500);

this.setVisible(true);

setResizable(false);

pack();

}

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new LoginFrame().setVisible(true);

}

});

}

//处理按钮事件

public void actionPerformed(ActionEvent e) {

if (e.getActionCommand().equals("登陆")) {

//如果用户按下“登陆”按钮

boolean isAuthrized = DBHandler.isAuthorized(jTextFieldName

.getText(), jPasswordFieldPw.getText());

if (isAuthrized) {

int prio = DBHandler.getPrio(jTextFieldName.getText(),

jPasswordFieldPw.getText());

SelRoomFrame srd = new

SelRoomFrame(jTextFieldName.getText(),

prio);

this.dispose();

} else {

JOptionPane.showMessageDialog(this, "用户名密码不正确!");

return;

}

} else if (e.getActionCommand().equals("注册")) {

//如果用户按下“注册”按钮

RegisterFrame rgf = new RegisterFrame(this);

this.setVisible(false);

} else {

//如果用户按下“管理”按钮

if (DBHandler.isAdmin(jTextFieldName.getText(), jPasswordFieldPw

.getText())) {

ManageFrame mf = new ManageFrame(this);

} else {

JOptionPane.showMessageDialog(this, "用户名密码不正确!");

return;

}

}

}

}

5.2登入选择聊天室

public class LoginFrame extends javax.swing.JFrame implements ActionListener {

private javax.swing.JButton jButtonLogin;

private javax.swing.JButton jButtonRegister;

private javax.swing.JLabel jLabel1;

private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel3;

private javax.swing.JPasswordField jPasswordFieldPw;

private javax.swing.JTextField jTextFieldName;

private JPanel jPanel1;

private JButton jButtonManage;

public LoginFrame() {

try {

//设置显示外观为本地系统外观。注意此句需放在初始化所有控件之前。

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName( ));

} catch (Exception e) {

e.printStackTrace();

}

initComponents();

}

//初始化所有控件

private void initComponents() {

jPanel1 = new JPanel();

jTextFieldName = new javax.swing.JTextField();

jPasswordFieldPw = new javax.swing.JPasswordField();

jButtonLogin = new javax.swing.JButton("登陆");

jButtonRegister = new javax.swing.JButton("注册");

jLabel1 = new javax.swing.JLabel();

jLabel2 = new javax.swing.JLabel();

jLabel3 = new javax.swing.JLabel();

getContentPane().setLayout(null);

getContentPane().add(jLabel1);

jLabel1.setText("聊天系统");

//设置label中的字体和大小,并用粗体显示

jLabel1.setFont(new Font("", Font.BOLD, 30));

jLabel1.setBounds(200, 100, 400, 50);

getContentPane().add(jPanel1);

jPanel1.setLayout(null);

jPanel1.add(jLabel2);

jLabel2.setText("用户名:");

jLabel2.setPreferredSize(new Dimension(50, 30));

jLabel2.setBounds(100, 150, 100, 30);

jPanel1.add(jTextFieldName);

jTextFieldName.setBounds(200, 150, 150, 30);

jLabel3.setText("密码:");

jLabel3.setBounds(100, 200, 100, 30);

jPanel1.add(jLabel3);

jPanel1.add(jPasswordFieldPw);

jPasswordFieldPw.setBounds(200, 200, 150, 30);

jPanel1.add(jButtonLogin);

jButtonLogin.setBounds(100, 250, 80, 20);

jButtonLogin.addActionListener(this);

jPanel1.add(jButtonRegister);

jButtonRegister.addActionListener(this);

jButtonRegister.setBounds(200, 250, 80, 20);

jButtonManage = new JButton("管理");

jButtonManage.setBounds(300, 250, 80, 20);

jButtonManage.addActionListener(this);

jPanel1.add(jButtonManage);

jPanel1.setBounds(0, 0, 500, 500);

jPanel1.setVisible(true);

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOS E);

Dimension screenSize =

Toolkit.getDefaultToolkit().getScreenSize();

//把窗口放在屏幕中间

this.setPreferredSize(new Dimension(500, 500));

this.setBounds(screenSize.width/2-250, screenSize.height/2-250, 500, 500);

this.setVisible(true);

setResizable(false);

pack();

}

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new LoginFrame().setVisible(true);

}

});

}

//处理按钮事件

public void actionPerformed(ActionEvent e) {

if (e.getActionCommand().equals("登陆")) {

//如果用户按下“登陆”按钮

boolean isAuthrized = DBHandler.isAuthorized(jTextFieldName

.getText(), jPasswordFieldPw.getText());

if (isAuthrized) {

int prio = DBHandler.getPrio(jTextFieldName.getText(),

jPasswordFieldPw.getText());

SelRoomFrame srd = new

SelRoomFrame(jTextFieldName.getText(),

prio);

this.dispose();

} else {

JOptionPane.showMessageDialog(this, "用户名密码不正确!");

return;

}

} else if (e.getActionCommand().equals("注册")) {

//如果用户按下“注册”按钮

RegisterFrame rgf = new RegisterFrame(this);

this.setVisible(false);

} else {

//如果用户按下“管理”按钮

if (DBHandler.isAdmin(jTextFieldName.getText(), jPasswordFieldPw.getText())) {

ManageFrame mf = new ManageFrame(this);

} else {

JOptionPane.showMessageDialog(this, "用户名密码不正确!");

return;

}

}

}

}

public class SelRoomFrame extends JFrame implements ActionListener {

private JRadioButton jRBut1 = new JRadioButton("谈天说地");

private JRadioButton jRBut2 = new JRadioButton("缘分天空");

private JRadioButton jRBut3 = new JRadioButton("休闲娱乐");

private JButton entBut = new JButton("进入");

private JButton exitBut = new JButton("退出");

private JLabel jLabel= new JLabel("请选择聊天室");

private final ButtonGroup group = new ButtonGroup( );

private String room;

private String name;

private int prio;

public SelRoomFrame(String name, int prio){

try

{

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); }

catch(Exception e)

{

e.printStackTrace();

}

https://www.360docs.net/doc/2f12934065.html, = name;

this.prio= prio;

init();

}

private void init(){

getContentPane().setLayout(null);

jLabel.setFont(new Font("", Font.BOLD, 30));

jLabel.setBounds(100, 30, 200, 50);

jRBut1.setSelected(true);

jRBut1.setBounds(100,100,200,30);

jRBut2.setBounds(100,150,200,30);

jRBut3.setBounds(100,200,200,30);

entBut.setBounds(100,250,80,30);

exitBut.setBounds(200,250,80,30);

group.add(jRBut1);

group.add(jRBut2);

group.add(jRBut3);

getContentPane().add(jRBut1);

getContentPane().add(jRBut2);

getContentPane().add(jRBut3);

getContentPane().add(entBut);

getContentPane().add(exitBut);

getContentPane().setPreferredSize(new Dimension(400, 400));

getContentPane().setBounds(0,0,400,400);

getContentPane().add(jLabel);

entBut.addActionListener(this);

exitBut.addActionListener(this);

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

// 把窗口放在屏幕中间

this.setPreferredSize(new Dimension(400, 400));

this.setBounds(screenSize.width / 2 - 250, screenSize.height / 2 - 250, 400, 400);

this.setVisible(true);

setResizable(false);

pack();

}

public void actionPerformed(ActionEvent e) {

if(e.getActionCommand().equals("进入")){

String choice = getSelButton().getText();

if(choice.equals("谈天说地")){

room = "谈天说地";

}else if(choice.equals("缘分天空") ){

room ="缘分天空";

}else {

//休闲娱乐

room ="休闲娱乐";

}

ChatFrame chatframe = new ChatFrame(name,room,prio);

}

this.dispose();

}

public AbstractButton getSelButton(){

Enumeration e = group.getElements();

while(e.hasMoreElements()){

AbstractButton ab = e.nextElement();

if(ab.isSelected())return ab;

}

return null;

}

}

5.3注册

public class RegisterFrame extends javax.swing.JFrame implements ActionListener { private javax.swing.JButton jButtonReg;

private javax.swing.JLabel jLabel1;

private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel3;

private javax.swing.JLabel jLabel4;

private javax.swing.JLabel jLabel5;

private javax.swing.JTextField jTextFieldName;

private javax.swing.JPasswordField jTextFieldPw1;

private javax.swing.JPasswordField jTextFieldPw2;

private JButton jBuutonExt;

private LoginFrame f;

public RegisterFrame(LoginFrame f) {

this.f = f;

try {

//设置显示外观为本地系统外观。注意此句需放在初始化所有控件之前。UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

} catch (Exception e) {

e.printStackTrace();

}

initComponents();

}

// 初始化所有控件。

private void initComponents() {

jLabel1 = new javax.swing.JLabel();

jTextFieldName = new javax.swing.JTextField();

jLabel2 = new javax.swing.JLabel();

jTextFieldPw1 = new javax.swing.JPasswordField();

jLabel3 = new javax.swing.JLabel();

jTextFieldPw2 = new javax.swing.JPasswordField();

jLabel4 = new javax.swing.JLabel();

jLabel5 = new javax.swing.JLabel("用户注册");

jLabel5.setFont(new Font("", Font.BOLD, 30));

jLabel5.setBounds(200, 50, 200, 50);

jButtonReg = new javax.swing.JButton();

jBuutonExt = new javax.swing.JButton();

getContentPane().setLayout(null);

getContentPane().add(jLabel1);

getContentPane().add(jTextFieldName);

getContentPane().add(jLabel2);

getContentPane().add(jTextFieldPw1);

getContentPane().add(jLabel3);

getContentPane().add(jTextFieldPw2);

getContentPane().add(jLabel4);

getContentPane().add(jLabel5);

getContentPane().add(jButtonReg);

getContentPane().add(jBuutonExt);

getContentPane().setVisible(true);

getContentPane().setPreferredSize(new Dimension(500, 500)); jLabel1.setText("用户名");

jLabel1.setPreferredSize(new Dimension(80, 30));

jLabel1.setBounds(100, 150, 80, 30);

jLabel2.setText("密码");

jLabel2.setPreferredSize(new Dimension(80, 30));

jLabel2.setBounds(100, 190, 80, 30);

jLabel3.setText("重复密码");

jLabel3.setPreferredSize(new Dimension(120, 30));

jLabel3.setBounds(100, 230, 80, 30);

jTextFieldName.setPreferredSize(new Dimension(200, 30)); jTextFieldName.setBounds(200, 150, 200, 30);

jTextFieldPw1.setPreferredSize(new Dimension(200, 30)); jTextFieldPw1.setBounds(200, 190, 200, 30);

jTextFieldPw2.setPreferredSize(new Dimension(200, 30)); jTextFieldPw2.setBounds(200, 230, 200, 30);

jButtonReg.setText("注册");

jButtonReg.setBounds(200, 270, 80, 30);

jButtonReg.addActionListener(this);

jBuutonExt.setText("退出");

jBuutonExt.setBounds(300, 270, 80, 30);

jBuutonExt.addActionListener(this);

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

// 把窗口放在屏幕中间

this.setPreferredSize(new Dimension(500, 500));

this.setBounds(screenSize.width / 2 - 250, screenSize.height / 2 - 250, 500, 500);

this.setVisible(true);

this.setResizable(false);

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

pack();

}

//处理按钮事件

public void actionPerformed(ActionEvent e) {

if (e.getActionCommand().equals("注册")) {

//用户点击“注册”按钮

if (!(jTextFieldPw1.getText().equals(jTextFieldPw2.getText()))) { JOptionPane.showMessageDialog(this, "密码不一致!请重新输入");

return;

}

if (jTextFieldPw1.getText().equals("")) {

JOptionPane.showMessageDialog(this, "密码不能为空!");

return;

}

if (jTextFieldName.getText().equals("")) {

JOptionPane.showMessageDialog(this, "用户名不能为空!");

return;

}

int status = DBHandler.regUser(jTextFieldName.getText(),

jTextFieldPw1.getText());

if (status == 0) {

JOptionPane.showMessageDialog(this, "注册成功!");

f.show();

this.dispose();

} else if (status == 1) {

JOptionPane.showMessageDialog(this, "有重名!");

return;

} else {

JOptionPane.showMessageDialog(this, "数据库操作失败!");

return;

}

} else if (e.getActionCommand().equals("退出")) {

//用户按下“退出”按钮。

f.show();

this.dispose();

}

}

}

5.4管理员

package chat;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JScrollPane;

import javax.swing.UIManager;

import javax.swing.JButton;

public class ManageFrame extends JFrame implements ActionListener { private LoginFrame loginf;

private List list;

private JButton jButtonDel = new JButton("删除");

private JButton jButtonExt = new JButton("退出");

private JLabel jLabel = new JLabel("用户管理");

private JScrollPane jScrollPane;

public ManageFrame(LoginFrame f) {

loginf = f;

try {

//设置显示外观为本地系统外观。注意此句需放在初始化所有控件之前。UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

} catch (Exception e) {

e.printStackTrace();

}

initComponents();

this.setVisible(true);

}

//初始化所有控件。

private void initComponents() {

//从数据库中获得userInfo表中的所有用户总数,并用此初始化用户成员列表。

int count = DBHandler.getAllUsersNum();

if (count == -1) {

list = new List(0, true);

} else {

//设置列表支持多选

list = new List(count, true);

java.util.List names = DBHandler.getAllUsers();

for (int i = 0; i < names.size(); i++) {

list.addItem(names.get(i).toString());

}

}

list.setPreferredSize(new Dimension(200, 400));

list.setBounds(50, 100, 200, 400);

jScrollPane = new JScrollPane(list);

jScrollPane.setPreferredSize(new Dimension(200, 400));

jScrollPane.setBounds(50, 100, 200, 400);

jLabel.setFont(new Font("", Font.BOLD, 30));

jLabel.setBounds(200, 30, 200, 50);

jButtonDel.setPreferredSize(new Dimension(100, 30));

jButtonDel.setBounds(300, 100, 100, 30);

jButtonDel.addActionListener(this);

jButtonExt.setPreferredSize(new Dimension(100, 30));

jButtonExt.setBounds(300, 150, 100, 30);

jButtonExt.addActionListener(this);

getContentPane().setLayout(null);

getContentPane().add(jScrollPane);

getContentPane().add(jButtonDel);

getContentPane().add(jButtonExt);

getContentPane().setBounds(0, 0, 500, 600);

getContentPane().add(jLabel);

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

// 把窗口放在屏幕中间

this.setPreferredSize(new Dimension(500, 600));

this.setBounds(screenSize.width / 2 - 250, screenSize.height / 2 - 250, 500, 500);

this.setVisible(true);

setResizable(false);

pack();

}

//响应按钮操作

public void actionPerformed(ActionEvent e) {

if (e.getActionCommand().equals("删除")) {

String[] selItems = list.getSelectedItems();

if (selItems.length == 0) {

JOptionPane.showMessageDialog(this, "请选择被删除的人!");

return;

}

if (JOptionPane.showConfirmDialog(this, "确定要删除么?", "",

JOptionPane.OK_CANCEL_OPTION) == JOptionPane.CANCEL_OPTION) {

return;

}

for (int i = 0; i < selItems.length; i++) {

if (!DBHandler.deleteUser(selItems[i])) {

JOptionPane.showMessageDialog(this, "删除" + selItems[i]

+ "失败");

} else {

list.remove(selItems[i]);

}

}

list.repaint();

} else {

loginf.show();

dispose();

}

}

}

5.5聊天

public class ChatFrame extends JFrame implements ActionListener { public static List selList = null;

public static JTextArea msgArea = new JTextArea();

public static StringBuffer chatto = new StringBuffer();

public static StringBuffer message =new StringBuffer();

public static JScrollPane sPane = new JScrollPane() ;

public static Socket clientSocket = null;

public static String room;

public static String name;

private static PrintStream ps=null;

private JButton kickBut = new JButton("踢走");

private int prio;

private JSplitPane jSplitPane = null;

private JLabel title = null;

private JScrollPane leftPane;

private JButton talkBut = new JButton("聊天");

private JButton allBut = new JButton("对所有人聊天");

private JPanel rightPanel = new JPanel();

private JPanel rightBPanel = new JPanel();

public Listen listen=null;

private ChatDialog dialog = new ChatDialog();

public ChatFrame(String name,String room,int prio) {

https://www.360docs.net/doc/2f12934065.html, = name;

ChatFrame.room = room;

this.prio = prio;

try {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName( ));

init();

clientSocket =new Socket(InetAddress.getLocalHost(),2525);

ps = new PrintStream(clientSocket.getOutputStream());

listen = new Listen(this,clientSocket);

listen.start();

sendMessage("login:"+room+":"+name+"\n");

} catch (Exception e) {

e.printStackTrace();

}

}

//初始化所有组件

private void init(){

getContentPane().setLayout(new BorderLayout());

title = new JLabel(name+"欢迎您进入"+room+"!",JLabel.CENTER);

title.setFont(new Font("MS Song", 0, 30));

getContentPane().add(title,BorderLayout.NORTH);

selList= new List(30,true);

selList.setPreferredSize(new Dimension(150,400));

rightPanel.setLayout(new BorderLayout());

rightPanel.add(selList,BorderLayout.CENTER);

rightBPanel.setPreferredSize(new Dimension(150,110));

rightPanel.add(rightBPanel,BorderLayout.SOUTH);

talkBut.setText("聊天");

talkBut.addActionListener(this);

allBut.setText("对所有人聊天");

allBut.addActionListener(this);

talkBut.setPreferredSize(new Dimension(150,30));

allBut.setPreferredSize(new Dimension(150,30));

kickBut.setPreferredSize(new Dimension(150,30));

rightBPanel.add(talkBut);

rightBPanel.add(allBut);

//如果是管理员,则加上"踢走"按钮

if(prio==0){

rightBPanel.add(kickBut);

}

msgArea.setPreferredSize(new Dimension(250,300));

msgArea.setLineWrap(true);

msgArea.setFont(new Font("MS Song", 0, 20));

msgArea.setAutoscrolls(true);

msgArea.setLineWrap(true);

msgArea.setEditable(false);

leftPane = new JScrollPane(msgArea);

//使用分割窗口把消息发布区放在窗口左边,成员列表以及聊天按钮放在右边

jSplitPane = new

JSplitPane(JSplitPane.HORIZONTAL_SPLIT,leftPane,rightPanel);

jSplitPane.setAutoscrolls(true);

getContentPane().add(jSplitPane,BorderLayout.CENTER);

setSize(new Dimension(500,500));

getContentPane().setPreferredSize(new Dimension(500,500));

Dimension screenSize =

Toolkit.getDefaultToolkit().getScreenSize();

//把窗口放在屏幕中间

this.setPreferredSize(new Dimension(500, 500));

this.setBounds(screenSize.width/2-250, screenSize.height/2-250, 500, 500);

this.setVisible(true);

ChatDialog chatDialog = new ChatDialog();

pack();

}

//处理按钮事件

public void actionPerformed(ActionEvent e) {

if(e.getActionCommand().equals("聊天")){

//如果“聊天按钮被按下”

if(selList.getSelectedItems().length!=0){

dialog.input.setText("");

dialog.input.setEditable(true);

dialog.show();

dialog.input.requestFocus();

}else {

JOptionPane.showMessageDialog(this, "请选择聊天对象!");

return;

}

}

if(e.getActionCommand().equals("对所有人聊天")){

//如果“对所有人聊天”按钮被按下

//选择所有成员

for(int i=0;i

selList.select(i);

}

dialog.input.setText("");

dialog.input.setEditable(true);

dialog.show();

dialog.input.requestFocus();

}

if(e.getActionCommand().equals("踢走")){

//处理踢人操作

基于JAVA实现聊天室

第1章绪论 1.1 论文背景及课题来源 随着网络技术的发展和普及,Internet已经成为人们获取有关信息和相互交流的重要途径之一,越来越多的机构和组织开始利用网络资源传递、发布、收集和管理信息。这对各种类型的网络提供一次很大的挑战与机遇,特别是通过网络进行信息交互的这种活动,更加使网络的经营方式充满了活力和机动性[5]。 基于C/S模型的Java聊天室是应用于网络交流领域的系统,它的主要特点有:(1)通用性:聊天室系统在各种各样的网络中均可以运行,系统具有较高的可移植性和使用性; (2)实用性:系统具有良好的人机界面,便于各类使用者操作,提供了人性化的服务; (3)及时性:通过网络的连接,系统双方的交流可以在短期内进行,相比与传统面对面的交流节省不少时间[15]。 聊天室中聊天内容的及时性和准确性是极其重要的,它主要针对当今社会快节奏生活,人们没有很多时间来等信息。本系统提供的功能便于系统使用双方的信息交流,有效的提高了使用者的使用效率,缩短了使用者的使用时间[6]。 1.2 本课题在国内外的发展状况 随着网络技术的发展和普及,多数网站纷纷利用自己的网络资源建立聊天室,并为客户提供各种各样便捷的服务。中国的一些龙头网站,如sina,有很多聊天室,供国内外的不同的人们进行不同话题的讨论,不仅将会员发展由国内延伸到国际,更是为提高自身的知名度提供了方便[2]。 聊天室的开放性、信息资源的多样性可为网站发展提供优良的广告宣传和商品推广,这是其他网站活动方式所无法比拟的,聊天室趋向方便化、快捷化是各大网站成长的必然经历的阶段[8]。 1.3 应解决的问题及系统开发意义 本系统针对聊天室用户的需要,建立了客户端和服务器端。主要解决的问题包括:(1)服务器端和客户端要实现界面化,并且界面尽量人性化。 (2)服务器端能够正确的启动,并且时刻监视客户端,保持与客户端的连接。 (3)客户端能够快速准确的连接上服务器端,发送的信息经服务器端可以转发给其他客户。 (4)异常处理,对于用户的不正确的操作系统应该有提示。 基于C/S的Java聊天室系统它的开发意义在于为人们之间相互交流提供了一个快捷、方便的应用平台。大型网站可以通过聊天室来提高自身的知名度,增加的访问流量。

基于java socket的聊天室项目文档

北京邮电大学软件学院 2010-2011 学年第 1学期实训项目文档 (每个项目小组一份) 课程名称:全日制研究生实训 项目名称:通信软件实训 项目完成人: 姓名:学号: 姓名:学号: 姓名:学号: 姓名:学号: 姓名:学号: 姓名:学号: 指导教师: 日期:2011年1月21日

基于java socket的聊天室实现 一 . 实训项目目的和要求(说明通过本项目希望达到的目的和要求) 目的:熟练掌握socket编程原理,并用java socket实现聊天室 要求:实现p2p和聊天室功能 二 . 实训项目开发环境(说明本项目需要的环境) 开发工具:Eclipse SDK Version: 3.5.2 和NetBeans 6.9.1 版本 系统:win7 三 . 实训项目内容(说明本项目的内容,如:问题分析、设计方案、算法、设计图等) 1.问题分析 网络编程中两个主要的问题一个是如何准确的定位网络上一台或多台 主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协 议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一 地确定Internet上的一台主机。而TCP层则提供面向应用的可靠(tcp)的 或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要 关心IP层是如何处理数据的。目前较为流行的网络编程模型是客户机/服务 器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。 客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运 行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户, 同时自己继续监听服务端口,使后来的客户也能及时得到服务。 两类传输协议:TCP;UDP。TCP是Tranfer Control Protocol的简称, 是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个 顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建 立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或 接收操作。

JAVA聊天室系统的设计与实现

目录 第1章绪论- 1 - 1.1论文背景及课题来源 (1) 1.2本课题在国内外的发展状况 (1) 1.3应解决的问题及系统开发意义 (1) 第2章开发工具及相关技术介绍........................................................................................................... - 2 - 2.1J A V A与S OCKET简介 .. (2) 2.2JB UILDER5介绍 (3) 2.3C/S模型介绍 (3) 2.4用J A V A实现S OCKET模型 (4) 2.5J A V A中的线程模型简介 (5) 2.6SQL SERVER2000简介 (5) 第3章系统需求分析............................................................................................................................... - 6 - 3.1系统任务描述. (6) 3.2系统功能分析 (6) 3.2.1 系统的功能需求....................................................................................................................... - 6 - 3.2.2系统数据流图............................................................................................................................ - 7 - 3.2.3系统数据分析............................................................................................................................ - 8 - 3.3系统可行性分析 (9) 第4章系统设计 .................................................................................................................................... - 11 - 4.1系统总体结构设计 (11) 4.2数据库设计 (12) 4.3系统功能模块详细设计 (13) 第5章编码与实现 ................................................................................................................................ - 16 - 5.1系统主要模块代码 (16) 5.1.1启动、停止服务器.................................................................................................................. - 16 - 5.1.2客户端连接服务器.................................................................................................................. - 17 -

基于JAVA网络聊天室设计

滨江学院 毕业论文(设计)题目基于JA V A网络聊天室设计 学生姓名郭胜航 学号 20072334069 院系滨江学院电子工程系 专业通信工程 指导教师张艳萍 职称教授 二O一一年五月三十日

目录 目录................................................................................. I 第1章绪论. (1) 1.1 研究背景 (1) 1.2 研究目的、内容及要求 (2) 1.2.1 目的 (2) 1.2.2 内容 (2) 1.2.3 要求 (2) 第2章系统开发环境与工具的选择 (3) 2.1 开发环境的选择 (3) 2.2 开发工具的选择 (3) 2.3 开发技术的选择 (4) 第3章需求分析 (5) 3.1 项目概述 (5) 3.1.1 产品描述 (5) 3.1.2 产品功能 (6) 3.2 功能需求 (6) 3.2.1 用户注册 (6) 3.2.2 用户登入 (7) 3.2.3 公聊 (7) 3.2.3 私聊 (8) 3.2.4 发送表情 (8) 3.2.5 聊天记录 (9) 3.2.6 系统消息 (9) 3.2.7 字体属性设置 (9) 3.2.8 用户退出 (10) 第4章概要设计 (11) 4.1 目的 (11) 4.2 运行环境 (11) 4.3 条件与限制 (11) 4.4 体系结构概述 (11) 4.5 功能设计 (12) 4.5.1 用户注册 (12) 4.5.2 用户登入 (12) 4.5.3 公聊 (13) 4.5.4 私聊 (14) 4.5.5 表情 (14) 4.5.6 字体设置 (15) 4.5.7 记录保存 (15) 4.5.8 系统消息 (16)

java编写的简单局域网聊天室(适合初学者).

import java.awt.BorderLayout; import java.awt.Button; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Frame; import java.awt.Panel; import java.awt.Point; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.File; import java.io.FileWriter; import java.io.IOException; import https://www.360docs.net/doc/2f12934065.html,.DatagramPacket; import https://www.360docs.net/doc/2f12934065.html,.DatagramSocket; import https://www.360docs.net/doc/2f12934065.html,.InetAddress; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class GUI_Chat extends Frame { private static final long serialVersionUID = 1L; private TextArea viewTextArea = new TextArea(20, 1; private TextArea sendTextArea = new TextArea(; private TextField ipTextField = new TextField(20; private Button sendButton = new Button(" 发送" ; private Button clearButton = new Button(" 清屏" ; private Button logButton = new Button(" 记录" ; private Button shakeButton = new Button(" 震动" ; private Panel panel = new Panel(; private DatagramSocket socket ;

JAVA聊天室实验报告

JA V A聊天室实验报告 姓名:马琳越 班级:131114 学号:13111368 日期:2014年4月23日

目录 目录 (2) JA V A程序课程设计任务书 (3) 摘要 (4) 第1章引言 (5) 第2章聊天室系统的设计 (7) 第3章界面设计 (11) 第4章总结 .................................................................................. 错误!未定义书签。

Java聊天室的设计任务书 1.主要内容 用JA V A实现基于C/S模式的聊天室系统。聊天室分为服务器端和客户端部分,服务器端程序主要负责侦听客户端发来的信息,客户端需要登陆到服务器端才可以实现正常的聊天功能。 2.具体要求 A.服务器端主要功能 (1).在特定端口上进行侦听,等待客户端连接。 (2).用户可以配置服务器端的侦听端口,默认端口为8888。 (3).向已经连接到服务器端的用户发送系统消息。 B. 客户端主要功能 (1).连接到已经开启聊天服务的服务器端。 (2).用户可以配置要连接的服务器端的IP地址和端口号。 (3).用户可以配置连接后显示的用户名。 (4).用户可以向所有人或某一个人发送消息。 3.主要参考文献及运用工具 (1)Bruce Eckel 著Thinking in Java ,李刚著疯狂Java讲义 (2)使用技术:Java 使用开发工具:Eclipse

摘要 在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,例如,国外的ICQ、国内腾讯公司开发的OICQ。基于Java网络编程的强大功能,本次大作业要求使用Java编写一个聊天系统。 一般来说,聊天工具大多数由客户端程序和服务器程序外加服务器端用于存放客户数据的数据库组成,但是,由于自己数据库知识的部分遗忘,本程序未连接数据库,采用客户机/服务器架构模式,通过Java提供的Soket类来连接客户机和服务器并使客户机和服务器之间相互通信。 本系统建立在JAVA平台上,系统的设计使用了面向对象技术和面向对象的设计原则。系统采用C/S结构,客户端与客户端以及客户端与服务器端之间通过Socket传送消息。使用JAVA语言编写,开发工具采用Eclipse。服务器端设计与实现过程中,采用了多线程技术,可以在单个程序当中同时运行多个不同的线程,执行不同的任务。大大增强了程序对服务器资源的利用。 聊天系统完成后将可进行多人对多人的聊天,对好友进行添加、删除,对新用户的注册,发送消息、接受消息等等功能。

基于Java的简单网络聊天室编程

基于Java的简单网络聊天室编程 摘要:当前是信息网络得到飞速发展的时代,尤其是计算机和通信技术的发展和结合,深深的影响着我们的生活、学习和工作方式。其中,网络聊天工具成为人们日常交流的一种重要工具,它成本低,通信速度快,方便信息交流和资料的传递。本次开发的网络聊天系统是基于开放的Java应用程序设计的,系统采用客户机/服务器的架构模式,由客户端程序和服务器程序外加服务器端,用于存放客户数据的数据库组成,使用Java提供的Socket类以及Java的多线程功能,在不同的端口上部署各类服务,可以在单个程序中同时运行多个不同进程,而客户端通过Socket发送信息给服务器,从而实现多点对多点的聊天。 关键字:Java,交互性,Socket类,多线程 Zhao cheng-yu Abstract:The rapid development of the information networks, especially the development and integration of computer and communication technologies, has deeply affected our lives, learning and work. Among them, the Internet chat tool becomes an important tool for daily communication, because it is low cost, fast communication and facilitat einformation exchange and data transmission. The development of the Internet chat system is designed based on open Java application. It can be dynamic, real-time information transfer and efficient interaction so that it can deal more effectively with customer requests, and is easy to maintain and update. The system will use the client / server architecture model, which includes the client program and server programs plus server-side database used to store customer data. By using the socket class provided by java and java multi-threading capability,we can deploy various services on a different port and a number of different processes can be run simultaneously in a single program. Clients send information to the server through the socket in order to achieve multi-point-to-multipoint chat. Key words: Java, interactivity, the Socket class, multi-threaded

基于java开发的网络聊天室--------[Login.java]

import javax.swing.*; import java.awt.*; import java.awt.event.*; import https://www.360docs.net/doc/2f12934065.html,.*; import java.io.*; import https://www.360docs.net/doc/2f12934065.html,.*; /** * * Title: HappyChat聊天系统登录程序 * * * Description: 根据指定的服务器地址、用户名和密码登录聊天服务器 * * * Copyright: Copyright (c) 2006 * * * Filename: Login.java * * * @author 公子明 * @version 1.0 **/ 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;

用Java编写的UDP协议简单聊天室

用Java编写的UDP协议简单聊天室: package com; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import https://www.360docs.net/doc/2f12934065.html,.*; public class Chat { Frame frame = new Frame("个人聊天室"); TextField tfip = new TextField(15);// 用户输入IP地址的文本框List list = new List();// 用于显示接收消息的列表框DatagramSocket ds; public Chat() { try { ds = new DatagramSocket(50000); } catch (SocketException e) { e.printStackTrace(); } new Thread(new Runnable() { public void run() { try { byte buf[] = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, 1024); while (true) { ds.receive(dp); System.out.println("接收OK"); list.add(new String(buf, 0, dp.getLength()) + ":from" + dp.getAddress().getHostAddress(), 0);

java课程设计报告(java聊天室)

Java聊天室课程设计 一、需求分析 开发背景 在信息化社会的今天,网络飞速发展,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似MSN、QQ,网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个类似QQ的网络聊天工具的想法,且通过制作该程序还能更好的学习网络软件编程知识。 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也得到响应的服务。 设计要求 本课程设计的目标是利用套接字socket()设计一个聊天程序,该程序基于C/S模式,客户机器向服务器发聊天请求,服务器应答并能显示客户机发过来的信息。 设计目的 通过设计一个网络聊天程序,对套接字、数据报通讯、URL、与URLConnectiom的相关知识有详细的了解和充分的认识。能将相关的只是运用到相关的实践中去。 功能实现 聊天室共分为客户端和服务端两部分,服务器程序主要负责侦听客户端发来的消息,客户端需要登录到相应的服务器才可以实现正常的聊天功能。

聊天室的设计与实现

Java 聊天室的设计与实现 学院:计算机学院 专业: 班级: 学号: 姓名:秦向红 指导老师: 2014年11月

1. 设计背景 (1) 2. 设计环境 (1) 3. 设计目的 (1) 4. Socket介绍 (1) 5. Socket的通信机制图: (3) 6.程序的设计 (4) 6.1服务器的设计 (4) 6.2客户端的设计 (7) 7. 测试及运行结果 (10) 7.1服务器的测试 (10) 7.2客户端的测试 (10) 8.设计总结 (13) 9. 参考文献 (14) 10.附代码 (14) 10.1服务器代码 (14) 10.2客户端的设计 (17)

Java 聊天室的设计与实现 1.设计背景 在互联网如此发达的今天,即时通信工具已经成为我们如常生活中必不可少的一部分。人们对网络的依赖越来越多,越来越离不开网络,而由此产生的聊天工具也越来越多,类似有QQ、MSN、、微信等,网络聊天使网络聊天系统发展的日新月异,由此产生制作了一个简单的聊天功能的网络聊天程序,由此此设计我还可以更好的学习网络软件的编程知识。 Java语言是当今流行的网络编程语言,它具有面向对象,与平台无关,安全,多线程等特点。使用java语言不仅可以实现大型企业级的分布式应用系统,还能够为小型的的,嵌入式设备进行应用程序的开发。面向对象的开发是当今世界最流行的开发方法,它不仅具有更贴近自然地语义,而且有利于软件的维护和继承。 此次设计的题目为聊天室,可以巩固所学的java语言基础知识,增进java语言的编辑基本功,拓宽常用类库的应用,使我们通过教学环节与手段,把所学的课程及相关知识加以融会贯通,全面理解网络编程的含义。 2.设计环境 操作系统:Window 8 CPU:1.80GHz 内存:4.00GB 硬盘空间:80G 开发工具:JDK1.5、Eclipse 3.设计目的 聊天室虽然程序简单,但是在设计与实现的过程中能够充分学到基于Socket的网络编程的技术,使我掌握网络编程的服务的技术,能够充分利用我近期学到的java编程语言。实现聊天功能Client/Server的面向连接的编程技术。使用多线程进行多个客户端和服务器的连接,实现数据的读取与输入。 实现网络聊天系统的设计与实现,让我们掌握网络编程的服务的技术,让同学们更加深刻的了解,掌握这方面的知识 4.Socket介绍 Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。在Internet 上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。 Socket非常类似于电话插座。在这里,我以一个国家级电话网为例更加清楚的讲解一下Socket。电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个

利用JAVA实现简单聊天室

利用JAVA实现简单聊天室 1.设计思路 Java是一种简单的,面向对象的,分布式的,解释的,键壮的,安全的,结构中立的,可移植的,性能很优异的,多线程的,动态的语言。而且,Java 很小,整个解释器只需215K的RAM。 因此运用JAVA程序编写聊天室,实现简单聊天功能。程序实现了聊天室的基本功能,其中有: (1)启动服务器:实现网络的连接,为注册进入聊天室做准备。 (2)注册登陆界面:填写基本信息如姓名等,可以供多人进入实现多人聊天功能。 (3)发送信息:为用户发送信息提供平台。 (4)离开界面:使用户退出聊天室。 (5)关闭服务器:断开与网络的连接,彻底退出聊天室。 2.设计方法 在设计简单聊天室时,需要编写5个Java源文件:、、、、。 3 程序功能图及程序相关说明 (1)主功能框图

(2) 聊天室基本功能表 4.程序代码是说明 程序中引入的包:package Chat; import .*; import .*; import .*; import .*; import .*;

(1)服务器端代码中用户自定义类: 类名:Server 作用:服务器启动 继承的接口名:ActionListener public class Server implements ActionListener{ 定义的对象: count 计结果与分析 5个Java源文件:、、、、。分别编译这5个Java源文件,或运行“javac *.java”命令,编译全部的源文件,然后运行连接服务器的主类,即运行Server类。连接完毕后在运行注册的主函数类,即运行LogIn类。 首先运行启动服务器的文件,运行结果如下: 图1服务器启动成功 结果分析:在进入聊天室之前必须先启动服务器,实现服务器端的连接为用户的登录打开“窗口”。 其次运行用户注册登录文件,运行结果如下:

基于java的聊天室—客户端大学论文

河北农业大学 本科毕业论文(设计) 题目:基于JA V A的聊天室—客户端 摘要 随着互联网的发展,网络聊天工具作为一种交流工具,已经受到网民的青睐。目前,出现了很多功能强大的聊天工具,其中应用比较广泛的有腾讯QQ、MSN-Messager等等。 这个项目是用Java技术制作的,其中Java是一种程序设计语言,它具有简单的、面向对象、分布式、健壮性、安全性、可移植性等特点,并且提供了多线程的功能,使得在一个程序里可同时执行多个小任务,开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程的设计方法等。在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。经过分析这些情况,该局域网聊天工具采用Eclipse为基本开发环境和Java语言进行编写,首先可在短时间内建立系统应用原型,然后,对初始原型系统进行不断修正和改进,同时,采用多线程、多任务的设计思想,开发出性能稳定,功能全面的服务器。完整的实现系统的功能。通过本次毕业设计可以学到如何应用和实现面向对象的各种方法,如何使用Eclipse集成开发环境来创建和开发项目,从而完整的实现整个系统的功能。 该系统主要包括了服务器端和客户端界面使用两部分,其中服务器端用来接收新用户的注册和注册用户的登录验证以及进行服务器信息和用户信息的管理,其中用到了Socket套接字建立服务器,服务器能读取、转发客户端发来的信息。客户端通过注册界面让新用户进行注册;通过登录界面使用已注册的用户名和密码登录到聊天服务器;用户通过登录验证后即可进行在线聊天。多用户的即时聊天功能必须使用Thread类来建立多线程。本聊天系统采用Eclipse为基本的开发环境,用java语言进行程序的编写的。 关键词:客户端/服务器,多线程,聊天,socket

基于JAVA的分布式聊天系统设计(含源文件)

毕业论文 题目:基于JAVA的聊天系统设计 学生姓名: *** 学生学号: 079080617 系别: ******** 专业:******** 届别: 2011 指导教师:***

********2011届本科毕业论文 目录 未找到目录项。 基于JAVA的分布式聊天系统设计 学生:** 指导老师:*** ******************* 摘要:随着互联网的快速发展,网络聊天软件已经作为一种重要的信息交流工具,受到越来越多的网民的青睐。目前,出现了很多非常不错的聊天工具,其中应用比较广泛的有Netmeeting、腾讯QQ、MSN-Messager等等。本次设计的聊天系统就是模仿腾讯QQ来设计的。该系统开发主要包括网络聊天服务器程序和网络聊天客户端程序两个方面。前者通过Socket套接字建立服务器,服务器能读取、转发客户端发来的信息,并能刷新用户列表。后者通过与服务器建立连接,来进行客户端与客户端的信息交流。其中用到了局域网通信机制的原理,通过直接继承Thread类来建立多线程]1[。开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端架构(C/S)、网络编程的设计方法等。在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。经过分析这些情况,该局域网聊天工具采用Eclipse为基本开发环境和JAVA语言进行编写,首先可在短时间内建立系统应用原型,然后,对初始原型系统进行不断修正和改进,直到形成可行系统。 关键字:JAVA;分布式;局域网; Socket;C/S Distributed JAVA-based chat system Student:***

Java课程设计聊天室(含代码)

Java程序课程设计任务书 JAVA聊天室的系统的设计与开发 1.主要内容: 用JA VA实现基于C/S模式的聊天室系统。聊天室分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的信息,客户端需要登陆到服务器端才可以实现正常的聊天功能。 2.具体要求(包括技术要求等): 系统的功能要求: A.服务器端主要功能如下: 1.在特定端口上进行侦听,等待客户端连接。 2.用户可以配置服务器端的侦听端口,默认端口为8888。 3.向已经连接到服务器端的用户发送系统消息。 4.统计在线人数。 5.当停止服务时,断开所有的用户连接。 B.客户端的主要功能如下: 1.连接到已经开启聊天服务的服务器端。 2.用户可以配置要连接的服务器端的IP地址和端口号。 3.用户可以配置连接后显示的用户名。 4.当服务器端开启的话,用户可以随时登录和注销。 5.用户可以向所有人或某一个人发送消息。 学习并掌握一下技术:Java JavaBean 等 熟练使用一下开发工具:Eclipse,JCreator 等 实现系统上诉的功能。 3.进度安排: 12月28日~ 12月29日:课程设计选题,查找参考资料 12月30日~ 1月1日:完成系统设计 1月2日~ 1月5日:完成程序代码的编写 1月6日:系统测试与完善 1月7日:完成课程设计报告,准备答辩 4.主要参考文献: [1].张广彬孟红蕊张永宝.Java课程设计(案例精编)[M].清华大学出版社.2007年版

摘要 在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,例如,国外的ICQ、国内腾讯公司开发的OICQ。基于Java网络编程的强大功能,本次毕业设计使用Java编写一个聊天系统。 一般来说,聊天工具大多数由客户端程序和服务器程序外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式通过Java提供的Soket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能用多线程可完成多点对多点的聊天,数据库管理系统用SQL Server2000完成并通过JDBC-ODBC桥访问数据库。 本系统建立在JAVA平台上,系统的设计使用了面向对象技术和面向对象的设计原则。系统采用C/S结构,客户端与客户端以及客户端与服务器端之间通过Socket传送消息。使用JAVA语言编写,开发工具采用Eclipse。服务器端设计与实现过程中,采用了多线程技术,可以在单个程序当中同时运行多个不同的线程,执行不同的任务。大大增强了程序对服务器资源的利用。 聊天系统完成后将可进行多人对多人的聊天,对好友进行添加、删除,对新用户的注册,发送消息、接受消息等等功能。 关键词:多线程;客户机/服务器;JA V A ;Socket ;Eclipse ;TCP/IP

JAVA课程设计聊天室系统

J A V A课程设计聊天室 系统 -CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN

Java课程设计指导书(学生版初稿) 第二章聊天室系统 目标 背景介绍 2.1.1 业务背景 2.1.2 技术背景 需求分析 2.2.1功能需求分析 2.2.2 业务对象分析 2.2.3 验收测试要求 系统设计 2.3.1 总体设计 2.3.2 详细设计 系统实现 小结 展望

第二章聊天室系统 学习目标: 1、理解基于网络的C/S模式的软件系统结构,掌握网络编程的基本概念。 2、了解Java 的多线程机制,掌握Java多线程技术的应用。 3、熟练掌握基于TCP协议的Socket编程。 4、了解Socket编程的协议约定,掌握简单应用协议的开发。 5、进一步巩固发展团队协作能力。 学习寄语:想必大家都用过QQ,其主要功能就是聊天,是不是很想知道它是如何实现的本项目就是帮你实现一个简单的聊天系统,当然跟商业项目没法比,但从中你却可以了解这些系统是如何实现的,学到开发类似系统的基础知识和基本技能(基本并不意味不实用)。本章的内容有一定难度(多线程、基于TCP的应用协议编程),所以系统的开发采用了“增量迭代”的开发方式,由简易到繁难,希望你能顺利前行。我们的信念依然是:“不抛弃,不放弃”。你的改变和收获依然是老师真诚的期待,期待你更踏实、更自信。Come on!

背景介绍 2.1.1 业务背景 随着网络社会的不断发展,具有相同兴趣的网民需要互相远程交流,既要能省钱又要能即时交互,电话太贵、email又嫌慢,所以开发一个类似QQ 的及时通讯系统就变得非常有意义了。“Happy Chat”聊天系统应运而生,它较之QQ的唯一好处是自主开发,用的放心,更适合在局域网内使用。它提供的功能远不如QQ丰富,但应具有如下功能:(1)与聊天室成员一起聊天;(2)可以与聊天室成员私聊;(3)用户注册、登录;(4)服务器监控聊天内容;(5)服务器发送通知;(6)服务器踢人;(7)保存服务器日志。(8)保存用户聊天信息。 2.1.2 技术背景 本系统要求使用java技术开发,使用文件保存数据,集成开发环境使用eclipse。开发者应有java程序设计语言、SWING基本GUI组件、多线程、文件使用、socket编程、使用eclipse的基本知识和技能。系统采用两层C/S体系结构,C端负责通过GUI与客户交互,实现注册、登陆、收发信息、退出等功能; S端是聊天系统的应用服务器,主要有处理用户注册、登录、用户收发信息、用户退出等功能。C端和S端是通过网络交互的,其基本原理如图1所示:

java大作业设计报告JAVA聊天室

java大作业设计报告JAVA聊天室

JAVA程序设计多人聊天室

1设计目的 Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和静态的语言。本次课程设计旨在应用JAVA编程语言中的网络通信,多线程,数据库编程,图形界面编程等技术实现一个基本的多人在线网络聊天室。并以此巩固JAVA基础知识,体会面向对象的设计方法。 2平台要求 2.1使用: 搭载JAVA运行环境的平台即可。 2.2开发环境: Windows10 64bit JDK 1.8 Eclipse 4.4 Window Builder 3需求分析 管理员:启动服务器,关闭服务器,强制用户退出,聊天房间增添改查。 用户:GUI,注册,登陆,聊天等。

用例图: 4 概要设计 4.1 服务器设计 将客户端的请求抽象化,每种请求服务器都会产生一个特定的类的对象去处理它。服务器负责接受客户端请求,根据请求内容完成指定工作。为提高效率,采用多线程结合线程池设计技术,对于每个请求在线程池内得到一个线程去处理请求。如图3-1所示。 4.2 客户端设计

聊天室中一个事物的过程基本流程是:用户产生动作,客户端发送消息,服务器接收并处理,服务器返回处理结果,GUI 根 据结果进行显示的更新。客户端只在GUI 中采用多线程设计。而对服务器回应的接受都是单线程的因为只有一个服务器为自己服务,且在接收数据过程中连接是不可断开的。客户端的设计如图3-2所示。一次事物流程中的步骤编号在图中给出。 图 4-2客户端概要图 图 4-1服务器概要图 1 2 3 4 5 6 7

Java网络聊天室报告

Java网络聊天室课程报告 1系统开发的意义及需求分析 1.1整体思路 该C/S模式的聊天系统,就是服务器来提供服务端连接响应,客户端主动的发起连接请求。当多个用户同时连接到服务器时,经由服务器的接收与转发便可以实现客户之间的通信。 对于整体系统的流程,也是分为两部分,即客户端的发起请求,服务器响应请求。首先是客户端设置所想要连接的服务器,然后客户端就会根据设置的服务器IP地址,向服务器发起建立连接请求。而服务器端是始终在监听网络状态的,主要检测到有一个连接请求,那么服务器就会给当前的发起端分配一个服务线程,用于处理它的各种请求。 1.2功能需求分析 实现网络聊天的功能,采用Windows Socket(或Java Socket)编程,服务器与客户端采用了TCP/IP连接方式,在设计聊天方案时,可将所有信息发往服务器端,再由服务器进行处理,服务器端是所有信息的中心。聊天系统不外乎两个方面,服务器端和客户端。简单分析一下两个方面所要完成的任务。 服务器端的任务包括: 1、服务器端应当建立一个ServerSocket,并且不断进行侦听是否有客户端连接或者断开连接。 2、服务器端应当是一个信息发送中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息。 以上就是服务器端最主要的两个任务。不难看出,服务器端的任务并不复杂。 客户端应该完成的任务包括: 1、与服务器端建立通信通道,向服务器端发送信息。 2、接收来自服务器的信息。 相对服务器而言,客户端的任务更加简单,有了以上的简单分析,可以知道,解决上述四个问题,即完成了该聊天系统的核心。 2.系统分析与设计方案 2.1开发环境及工具 本系统所用的工具:

相关文档
最新文档