当前位置:文档之家› 网络编程课程设计---java聊天室

网络编程课程设计---java聊天室

网络编程课程设计---java聊天室
网络编程课程设计---java聊天室

《Windows网络编程技术》课程设计报告

题目:

院系:

专业班级:

学号:

学生姓名:

指导教师:

年月日

1.引言

1)本课题的来源

随着网络普及和上网人数的大增,在国内各大门户网站都架设了大型聊天室。如:新浪聊天室、中华网社区聊天室、搜狐等都成为网民们的热门聊天室。以新浪聊天室为例看,聊天室呈现积聚人气作用,并开设不同主题的聊天室以使网民们具有针对性的使用聊天室。

本小组计划设计一个实现基于Java语言的聊天室的Windows网络编程,启动服务器后,客户端运行,向服务器端发出请求,连接成功后,会弹出一个聊天室的界面,该界面有私聊(可加入生动的表情描述)、群聊、发送文件等功能,客户可以根据自己的需要选择不同的功能。本人在此小组中的具体任务是实现文件的接收功能,启动服务器监听后,接收客户端发来请求,安排线程接收对方发来的文件(例如文档、照片、音乐、电影等)并存入指定的文件夹中。

2)本系统涉及的知识点

1、套接字Socket的建立、连接、关闭,客户端和服务器端的输入/输出流的连接。

2、Java中的多线程及线程的常用方法、Runnable接口。

3、基于SWING的图形用户界面设计:布局设计、文本组件、按钮与标签组件、列表组件等。

4、InetAddress类。

5、输入/输出流:文件、文件字节流、文件字符流、缓冲流、数据流。

3)功能要求

(1)在服务器端和客户端分别创建一个套接字对象,通过输入输出流连接在一起。套接字调用close()方法关闭双方的套接字连接。

(2)使用多线程处理套接字连接,把服务器端或客户端读取的数据放在一个单独的线程中去进行,防止服务器端或客户端读取数据可能引起的堵塞。服务器端收到一个客户的套接字后,应该启动一个专门为该客户服务的线程。

(3)成功连接后,在图形界面中用户可以根据自己的需要进行不同的操作,如:群聊天、和某一个用户单独聊天(可加入生动的表情描述)、发送文件等。在界面中会显示用户的聊天记录。

4)开发环境的选择

在进行开发之前,首先决定的第一个问题就是,该使用什么开发环境来编写该系统?以目前常用的开发语言来讲有C/C++、.NET技术,JAVA、 Visual Basic 几种。还有Eclipse,、Borland JBuilder等,这些并不是程序语言,而是程序语言在建构程序时的“集成开发工具”,不过它们在开发设计的过程中也占有相当重要的角色,因为选用正确的集成开发工具,可以加速程序设计的进行、测试与排错,因而对整体进度具有决定性的影响。

基于以下几点,选择JAVA语言开发技术。

1、就执行平台而言,必须考虑的问题之一是用户可能使用的操作系统。用户可能使用的是Windows Linux。JAVA语言具有平台无关性,可以不需要任何修改就可以运行在支持JAVA的任何计算机上。

2、JAVA的Swing 组件开发技术可以开发丰富的图形界面,并且Swing API 类提供了丰富的外部接口和方法,可以方便实现系统功能。

3、就项目开发而言,纯粹的面向对象,加上数量巨大的类所提供的方法(函数)库的支持,使得利用Java开发各种应用程序,可以说是易如反掌。此外,在程序除错、修改、升级和增加新功能等方面,因其面向对象的特性,使得这些维护也变得非常容易。

4、Java支持内在的多线程运行,提供分布式的并发机制,运行效率高。

5、异常处理,为了使Java程式更稳定、更安全,Java引入了异常处理机制。能够在程序中产生异常情况的地方,执行相对应的处理,不至于因突发或意外的错误造成执行中断或是死机。通过这种异常处理,不仅能够清晰地掌握整个程序执行的流程,也使得程序的设计更为严谨。

6、高性能,Java可以在运行时直接将目标代码翻译成机器指令。Sun用直

接解释器一秒钟内可调用300,000个过程。翻译目标代码的速度与C/C++的性能没什么区别。

7、网络功能,Java可以说是借助因特网而重获新生的,自然具备编写网络功能的程序。不论是一般因特网/局域网的程序,如Socket、Email、基于Web 服务器的Servlet、JSP程序,甚至连分布式网络程序,如CORBA、RMI等的支持也是非常丰富的,使用起来也很方便。

5)开发技术的选择

本课题选择了java Socket技术开发网络聊天室。什么是socket? socket 是一种用于表达两台机器之间连接“终端”的软件抽象。对于一个给定的连接,在每台机器上都有一个socket,你可以想象一个虚拟的"管道"工作在两台机器之间,“管道”连在两台机器的socket上。当然,物理硬件和两台机器之间的“管道”这些连接装置都是未知的,抽象的所有目的就是为了让我们不必了解更多的细节。

简单的说,一台计算机上的socket同另一台计算机通话创建一个通信信道,程序员可以用这个信道在两台机器之间发送数据。当你发送数据时,TCP/IP协议栈的每一层都给你的数据里添加适当的报头。有个好消息是java语言隐藏了所有这些细节,这也是为什么他们有时被叫做“流socket”。

思考一下socket像电话听筒一样在电话的任意一端--你和我通过一个专门的信道来进行通话和接听。会话将一直进行下去直到我们决定挂断电话(除非我们使用蜂窝电话),除非我们挂断电话,否则我们各自的电话线路都会占线。

如果你需要在两台机器之间进行通讯而不使用高级机制像ORBs(以及CORBA, RMI, IIOP等等),socket比较适合你。Socket的底层机制则相当棘手。幸运的是,java平台给我们一些虽然简单但是相当强大的高层抽象以至于我们创建和使用socket更加容易一些。

一般而言,java socket有下面两种类型:

?TCP socket(由Socket类实现,下面的章节我们将对其讨论)

?UDP socket(由DatagramSocket类实现)

TCP和UDP扮演同样的角色,但是实现是不同的。两者都接收传输协议数据包并

把它们传递到表示层。TCP把信息分解成数据包(datagrams)并在接收端重新组装起来。它还对丢失的数据包进行重新传输的请求。TCP减少了上层的担忧。UDP 没有组装和重传请求的功能。它只是传输数据包。更高层的层必须确保信息的完整性以及组合顺序的正确性。

2、功能设计

1、Socket socket = new Socket(String host,int port);客户端创建Socket 对象,host是服务器端的IP地址,port是一个端口号,该对象用于连接服务器。

2、BufferedReader br=new BufferedReader

(new InputStreamReader(socket.getInputStream()));创建一个使用默认大小输入缓冲区的缓冲字符输入流。该输入流的指向是一个Reader流,Reader流将数据读入缓冲区,BufferedReader再从缓冲区中读取数据。InputStreamReader是字节流通向字符流的桥梁:它使用指定的charset读取字节并将其解码为字符。getInputStream()获取字节输入流。

3、PrintStream ps = new PrintStream(socket.getOutputStream());创建新的打印流,PrintStream为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。它还提供其他两项功能。与其他输出流不同,PrintStream永远不会抛出IOException;而是,异常情况仅设置可通过checkError方法测试的内部标志。

4、File file = getFile();调用getFile()函数返回一个file的的路径,提示用户输入一个路径,判断是否存在该文件, 如果输入非法给予提示, 重新输入。

5、ps.println(file.getName()); ps.println(file.length());将文件名和大小发送到服务端。

6、String msg = br.readLine();if("已存在".equals(msg)){} 接收服务器发送回来的是否存在的结果. 如果文件已存在, 打印提示, 客户端退出. 如果不存在, 准备开始上传。

7、long finishLen = Long.parseLong(msg); 服务器端文件的长度。

8、FileInputStream fis = new FileInputStream(file); 创建FileInputStream从文件中读取数据,OutputStream out = socket.getOutputStream();输出字节流,输出流接收输出字节并将这些字节写出到Socket的输出流。

9、fis.skip(finishLen); 从输入流中跳过并丢弃finishLen个字节的数据,即跳过服务端已完成的大小。

10、len = fis.read(byte[] buffer));从此输入流中将最多b.length个字节的数据读入一个byte 数组中。

11、out.write(byte[] b,int off,int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流。

3、聊天室界面

4、本人负责的部分

本人主要服务器端设计,为聊天室提供信息处理服务。其主要完成的功能是监听客户端的连接,聊天内容的群发和单个转发,通知聊天室的客户哪些人刚上线等等。

5、全部程序清单:

服务器端:

package chat;

import https://www.doczj.com/doc/ca11135250.html,.*;

import java.io.*;

import java.util.*;

public class ChatServer{

public static void main(String[] args)throws Exception{

ServerSocket svSocket =null;

Vector threads = new V ector();

try {

svSocket = new ServerSocket(5555);

System.out.println ("listening...");

}catch (Exception ex) {

System.out.println ("Server create ServerSocket failed!");

return;

}

try{

int nid = 0;

while(true){

Socket socket = svSocket.accept();

System.out.println ("accept a client");

ServerThread st = new ServerThread(socket,threads);

st.setID(nid++);

threads.add(st);

new Thread(st).start();

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

ServerThread temp = (ServerThread)threads.elementAt(i);

}

System.out.println ("Listen again...");

}

}catch(Exception ex){

System.out.println ("server is down");

}

}

}

class ServerThread implements Runnable{

private Vector threads;

private Socket socket = null;

private DataInputStream in = null;

private DataOutputStream out = null;

private int nid;

public ServerThread(Socket socket,Vector threads){

this.socket = socket;

this.threads = threads;

try {

in = new DataInputStream(socket.getInputStream());

out = new DataOutputStream(socket.getOutputStream());

}

catch (Exception ex) {

}

}

public void run(){

System.out.println ("Thread is running");

try{

while(true){

String receive = in.readUTF();

if(receive == null) return;

//下线通知

if(receive.contains("黯然下线了")){

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

ServerThread st = (ServerThread)threads.elementAt(i);

st.write("***"+receive+"***");

}

}

//上线通知

else if(receive.contains("上线了")){

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

ServerThread st = (ServerThread)threads.elementAt(i);

st.write("<"+getID()+">: "+receive);

}

}

//作为服务器监听中

else if(receive.contains("监听中")){

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

ServerThread st = (ServerThread)threads.elementAt(i);

st.write("***"+receive+"*** ");

}

}

//发送消息

else if(receive.contains("说")){

//发送广播消息

if(receive.contains("大家")){

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

ServerThread st = (ServerThread)threads.elementAt(i);

st.write("<"+getID()+">: "+receive);

}

}

//发送指定消息

else{

int temp=receive.indexOf("<");

int temp1=receive.indexOf(">");

//获得接收者ID号

String tempS=receive.substring(temp+1,temp1);

int i=Integer.parseInt(tempS);

//指定接收者输出

ServerThread st = (ServerThread)threads.elementAt(i);

st.write("<"+getID()+">: "+receive);

//发送者自己也输出

st = (ServerThread)threads.elementAt(getID());

st.write("<"+getID()+">: "+receive);

}

}

else{

ServerThread st = (ServerThread)threads.elementAt(getID());

st.write("***"+receive+"***");

}

}

}catch(Exception ex){

threads.removeElement(this);

ex.printStackTrace();

}

try{

socket.close();

}catch(Exception ex){

ex.printStackTrace();

}

}

public void write(String msg){

synchronized(out){

try{

out.writeUTF(msg);

}catch(Exception ex){

}

}

}

public int getID(){

return this.nid;

}

public void setID(int nid){

this.nid = nid;

}

}

服务器端的文件传送:

package chat;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.PrintStream;

import https://www.doczj.com/doc/ca11135250.html,.ServerSocket;

import https://www.doczj.com/doc/ca11135250.html,.Socket;

import java.text.SimpleDateFormat;

import java.util.Date;

import javax.swing.JOptionPane;

public class filesendServer{

public void filereceive() throws Exception{

//1.创建ServerSocket, 在循环中接收客户端请求, 每接收到一个请求就开启新线程处理

ServerSocket serverSocket = new ServerSocket(1234);

JOptionPane.showMessageDialog(null,"服务已启动,绑定1234端口!");

while(true){

Socket socket = serverSocket.accept();

new fileServerThread(socket).start();

}

}

}

class fileServerThread extends Thread{

Socket socket;

public fileServerThread(Socket socket) {

this.socket = socket;

}

public void run() {

FileOutputStream fos = null;

try {

//3.获取输入输出流

BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

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

//7.接收文件, 查找是否存在. 如果存在, 给写一个消息给客户端, 服务端线程结束. 如果不存在, 写消息给客户端, 准备开始上传.

String fileName = br.readLine();

long fileLen = Long.parseLong(br.readLine());

File dir = new File("upload");

dir.mkdir();

File file = new File(dir,fileName);

if(file.exists() && file.length() == fileLen){ // 文件已存在, length()即为文件大小, 文件不存在length()为0

ps.println("已存在");

return;

}

else{

ps.println(file.length()); // 文件已存在, length()即为文件大小, 文件不存在length()为0

}

//10.从Socket的输入流中读取数据, 创建FileOutputStream写出到文件中

String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());

System.out.println(time + " "+ (file.exists() ? " 开始断点续传: " : " 开始上传文件: ") + file.getName());

long start = System.currentTimeMillis();

InputStream in = socket.getInputStream();

fos = new FileOutputStream(file, true); // 文件存在就追加, 文件不存在则创建

byte[] buffer = new byte[1024];

int len;

while((len = in.read(buffer)) != -1){ //这个地方会堵塞,如果客服端没有关闭socket.服务器端读不到流末尾(-1)

fos.write(buffer, 0, len);

if(file.length() == fileLen) // 文件大小等于客户端文件大小时, 代表上传完毕

break;

}

fos.close();

long end = System.currentTimeMillis();

time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());

System.out.println(time + " " + " 上传文件结束: " + file.getName() + ", 耗时: " + (end - start) + "毫秒");

ps.println("上传成功");

socket.close();

} catch (IOException e) {

if(fos != null)

try {

fos.close();

} catch (IOException e1) {

e1.printStackTrace();

}

}

}

}

客户端的界面设计:

package chat;

import java.awt.*;

import java.io.*;

import https://www.doczj.com/doc/ca11135250.html,.*;

import java.awt.event.*;

import javax.swing.*;

public class Client

{

public static void main(String args[])

{

new ChatClient();

}

}

class ChatClient extends Frame implements ActionListener, Runnable{ private static final long serialVersionUID = -4149839042245330513L;

public Button listen,connection,sendtoall,sendtoone,exit,filesend;

public JComboBox emote;

public TextField inputName,inputContent;

public TextArea chatResult;

public Socket socket=null;

public DataInputStream in=null;

public DataOutputStream out=null;

public Thread thread;

ChatClient()

{

socket=new Socket();

Box box1=Box.createHorizontalBox();

listen=new Button("作为服务器监听");

connection=new Button("连接服务器");

filesend=new Button("发送文件");

exit=new Button("退出");

sendtoall=new Button("群聊");

sendtoone=new Button("私聊");

listen.setEnabled(false);

filesend.setEnabled(false);

sendtoall.setEnabled(false);

sendtoone.setEnabled(false);

inputName=new TextField(6);

inputName.setBackground(new Color(162,231,250));

inputContent=new TextField(22);

inputContent.setBackground(new Color(162,231,250));

chatResult= new TextArea("", 17,20,TextArea.SCROLLBARS_VERTICAL_ONL Y); chatResult.setBackground(new Color(162,231,250));

JLabel jlname=new JLabel("输入昵称");

box1.add(jlname);

box1.add(inputName);

box1.add(listen);

box1.add(connection);

box1.add(filesend);

box1.add(exit);

Box box2=Box.createHorizontalBox();

emote = new JComboBox();

emote.setModel(new DefaultComboBoxModel(new String[] { "表情", "微笑", "甜笑", "惊喜", "嘻嘻", "扮酷", "嘿嘿", "傻笑", "好奇", "媚眼", "鬼脸", "陶醉", "害羞", "生气", "嚷嚷", "发怒", "伤心", "高明", "菜鸟", "问号", "狂笑", "大哭", "示爱", "呻吟", "想想" }));

emote.setEnabled(false);

JLabel jlintput = new JLabel("输入聊天内容");

box2.add(jlintput);

box2.add(inputContent);

box2.add(emote);

box2.add(sendtoall);

box2.add(sendtoone);

listen.addActionListener(this);

connection.addActionListener(this);

filesend.addActionListener(this);

exit.addActionListener(this);

sendtoall.addActionListener(this);

sendtoone.addActionListener(this);

Box box3=Box.createHorizontalBox();

box3.add(chatResult);

thread=new Thread(this);

Box box0=Box.createVerticalBox();

box0.add(Box.createVerticalStrut(10));

box0.add(box1);

box0.add(Box.createVerticalStrut(10));

box0.add(box3);

box0.add(Box.createVerticalStrut(10));

box0.add(box2);

box0.add(Box.createVerticalStrut(10));

add(box0);

setBounds(10,30,500,400);

setBackground(new Color(80,212,248));

setVisible(true);

validate();

addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

System.exit(0);

try {

socket.close();

} catch (IOException e1) {

e1.printStackTrace();

}

}

});

}

public void actionPerformed(ActionEvent e) {

ActionProcess actionProcess=new ActionProcess(this);

try {

actionProcess.action(e);

} catch (Exception e1) {

e1.printStackTrace();

}

}

public void run()

{

String s=null;

while(true)

{

try

{

s=in.readUTF();

chatResult.append("\n"+s);

}

catch(IOException e)

{

chatResult.setText("与服务器断开连接");

try

{

socket.close();

}

catch(Exception ep){}

break;

}

}

}

}

客户端的界面事件处理:

package chat;

import java.awt.event.ActionEvent;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import https://www.doczj.com/doc/ca11135250.html,.*;

import javax.swing.JOptionPane;

public class ActionProcess implements Runnable {

private ChatClient client;

String name="";

String sendtoname="";

String sendtoID;

String filename="";

String filepath="";

public ActionProcess(ChatClient client) {

this.client=client;

}

public void action(ActionEvent e)throws Exception{

if(e.getSource()==client.connection)

{

try

{

if(client.socket.isConnected()){}

else

{

String addr=JOptionPane.showInputDialog("请输入服务器IP:");

InetAddress address=InetAddress.getByName(addr);

InetSocketAddress socketAddress=new InetSocketAddress(address,5555);

client.socket.connect(socketAddress);

client.in=new DataInputStream(client.socket.getInputStream());

client.out=new DataOutputStream(client.socket.getOutputStream());

name=client.inputName.getText();

client.out.writeUTF("姓名为"+name+"的朋友风尘仆仆地上线了...");

client.listen.setEnabled(true);

client.filesend.setEnabled(true);

client.sendtoall.setEnabled(true);

client.sendtoone.setEnabled(true);

client.emote.setEnabled(true);

if(!(client.thread.isAlive()))

client.thread=new Thread(this);

client.thread.start();

}

}

catch(IOException ee){}

}

if(e.getSource()==client.listen)

{

try

{

name=client.inputName.getText();

client.out.writeUTF("姓名为"+name+"的朋友正在监听中...");

filesendServer filesendserver=new filesendServer();

filesendserver.filereceive();

}

catch (Exception ee) {

ee.printStackTrace();

}

}

if(e.getSource()==client.filesend){

if(client.socket.isConnected())

try {

filesendClient filesendclient=new filesendClient();

filesendclient.filesend();

client.out.writeUTF("成功发送文件!");

}catch (Exception ee){}

}

if(e.getSource()==client.exit)

{ if(client.socket.isConnected())

try {

name=client.inputName.getText();

client.out.writeUTF("姓名为"+name+"的朋友黯然下线了...");

client.out.flush();

client.out.close();

client.socket.close();

} catch (IOException e1) {

e1.printStackTrace();

}

System.exit(0);

}

String em=client.emote.getSelectedItem().toString();

if (em.equals("表情")) {

em = "";

} else {

em += "着";

}

if(e.getSource()==client.sendtoall)

{

if(client.socket.isConnected()){

name=client.inputName.getText();

String s=client.inputContent.getText();

if(s!=null)

{

try

{

client.out.writeUTF(name+em+"对大家说:"+s);

client.out.flush();

client.inputContent.setText("");

}

catch(IOException e1){}

}

}

}

if(e.getSource()==client.sendtoone)

{

if(client.socket.isConnected()){

sendtoID=JOptionPane.showInputDialog("请输入对方ID:");

sendtoname=JOptionPane.showInputDialog("请输入对方姓名:");

String s=client.inputContent.getText();

name=client.inputName.getText();

if(s!=null)

{

try

{

client.out.writeUTF(name+"悄悄地"+em+"对<"+sendtoID+">"+sendtoname+"说:"+s);

client.out.flush();

client.inputContent.setText("");

}

catch(IOException e1){}

}

}

}

}

public void run()

{

String s=null;

while(true)

{

try

{

s=client.in.readUTF();

client.chatResult.append("\n"+s);

}

catch(IOException e)

{

client.chatResult.setText("与服务器断开连接");

try

{

client.socket.close();

}

catch(Exception ep){}

break;

}

}

}

}

客户端的文件接收:

package chat;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintStream;

import https://www.doczj.com/doc/ca11135250.html,.Socket;

import javax.swing.JOptionPane;

public class filesendClient {

public void filesend() throws Exception{

//1.创建Socket, 指定服务端IP地址和端口号, 连接服务器

String sendtoIP=JOptionPane.showInputDialog("请输入对方IP:");

Socket socket = new Socket(sendtoIP, 1234);

//2.获取输入输出流

BufferedReader br = new BufferedReader(

new InputStreamReader(socket.getInputStream()));

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

//3.提示用户输入一个路径,判断是否存在是否是文件, 如果输入非法给予提示, 重新输入

File file = getFile();

//4.将文件名和大小发送到服务端

ps.println(file.getName());

ps.println(file.length());

//5.接收服务器发送回来的是否存在的结果. 如果文件已存在, 打印提示, 客户端退出. 如果不存在, 准备开始上传.

String msg = br.readLine();

if("已存在".equals(msg)){

JOptionPane.showMessageDialog(null,"文件已存在,请不要重复上传!");

return;

}

long finishLen = Long.parseLong(msg); // 服务器端文件的长度

//6.创建FileInputStream从文件中读取数据, 写出到Socket的输出流

FileInputStream fis = new FileInputStream(file);

OutputStream out = socket.getOutputStream();

byte[] buffer = new byte[1024];

int len;

fis.skip(finishLen); // 跳过服务端已完成的大小

while((len = fis.read(buffer)) != -1)

out.write(buffer, 0, len);

fis.close();

socket.close();

}

public File getFile() throws Exception{ //得到文件的方法

File file=null;

boolean flag=false;

while(flag==false){

String filepath=JOptionPane.showInputDialog("请输入要上传的路径:");

file = new File(filepath);

if(!file.exists()){

JOptionPane.showMessageDialog(null,"您输入的路径不存在,请重新输入!");

flag=false;

}

else if(file.isDirectory()){

JOptionPane.showMessageDialog(null,"占不支持文件夹上传!请输入一个文件路径!");

flag=false;

}

else flag=true;

}

return file;

}

}

聊天室系统设计报告

青岛科技大学操作系统课程设计 学生班级计算机132班 学生学号1308010204 学生姓名王永远 2016 5 18 ______年 ___月 ___日

目录 设计题目:聊天室系统 (3) 一、设计目的及要求 (3) 1.1设计目的 (3) 1.2设计要求: (3) 二、技术背景 (3) 2.1网络编程 (3) 2.2网络通信 (3) 2.3 Socket (3) 2.4 TCP传输 (4) 2.5 Java的多线程机制 (4) 三、需求分析 (4) 3.1客户端 (4) 3.1.1登录 (4) 3.1.2多人聊天 (4) 3.1.3单人聊天 (5) 3.2服务器端 (5) 四、总体设计 (5) 4.1设计思想流程图 (5) 4.2设计思想分析 (6) 五、详细设计 (6) 5.1客户端设计 (7) 5.1.1登录界面 (7) 5.1.2聊天室界面 (7) 5.1.3单人聊天界面 (7) 5.2服务器端设计 (8) 六、系统测试 (8) 6.1登录测试 (8) 6.1.1用户名为英文字母 (8) 6.1.2用户名为中文 (9) 6.1.3用户名为标点符号 (9) 6.1.4多个用户有重名 (10) 6.1.5服务器地址不合法 (11) 6.1.6端口号不合法 (12) 6.1.7服务器未开启 (12) 6.2群发消息测试 (13) 6.3私聊测试 (15) 6.4用户列表显示测试 (16) 七、心得体会 (16) 八、参考资料 (16) 九、程序清单 (16)

设计题目:聊天室系统 一、设计目的及要求 1.1设计目的 通过该聊天室系统,掌握网络编程的概念及基于网络的C/S模式软件系统开发,掌握基于TCP 协议的Socket编程,掌握Java的多线程机制。 1.2设计要求: 实现多个用户之间类似于QQ的聊天程序,有聊天界面,多用户之间既可以实现群聊,也可以单独聊天。 二、技术背景 2.1网络编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。 2.2网络通信 (1)IP地址:网络中设备的标识,不易记忆,可用主机名 要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机,在TCP/IP协议中,这个标识号就是IP地址。 (2)端口号:用于标识进程的逻辑地址 物理端口网卡口 逻辑端口我们指的就是逻辑端口 A:每个网络程序都会至少有一个逻辑端口 B:用于标识进程的逻辑地址,不同进程的标识 C:有效端口:0~65535,其中0~1024系统使用或保留端口。 (3)传输协议:通信的规则,常见的有UDP,TCP UDP:将数据源和目的封装成数据包中,不需要建立连接;每个数据报的大小在限制在64k;因无连接,是不可靠协议;不需要建立连接,速度快。 TCP:建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低。 2.3 Socket (1)Socket套接字 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。 (2)Socket原理机制 A:通信的两端都有Socket。 B:网络通信其实就是Socket间的通信。 C:数据在两个Socket间通过IO传输。

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

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

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 -

聊天室设计报告

网 络 聊 天 系 统 设 计 报 告 组长:靳子豪 组员:凯强、许玉军、王明明 完成时间:2015年11月3日

一、可行性研究报告 可行性研究报告(ISO标准) 编者说明: 在立项时,应该对项目进行综合分析,探讨项目的经济、社会、技术可行性,从而为决策提供基础。该模板为ISO标准文档模板,其不仅适用于软件项目,对于其它的系统项目也适用。 1.引言 1.1 编写目的 该聊天室项目可行性研究报告是对项目课题的全面考虑,是项目分析员对下一步工作进行的前提,是软件开发人员正确成功开发项目的前提与基础。写可行性研究报告可以使软件开发团体尽可能早的估计研究课题的可行性,较早的认识到系统方案的缺陷,可以少花时间和精力,也可减少成本资金,避免专业性的问题。 1.2 背景 a. 待开发系统的名称:信息交流系统 b 用户:大众 c. 它基于web小浏览器的程序系统的设计与开发, 服务平台:appserv-win 开发语言:PHP 数据库:MY SQL 1.3 定义 技术可行性:分析功能,性能以及限制条件,能否是一个技术上可实现的系统 经济可行性:估计开发费用已及最终从开发成功的系统所获得的收入或利益,衡量比较支出的费用和收到的利益 1.4 参考资料 《软件工程导论》(第6版)清华大学海藩牟永敏编著 可行性研究的前提 2.1 要求 a、聊天室功能 用户的聊天功能,包括数据输入、修改、删除,并要达到界面美观又好、使用方便 b、软件的性能 开发该软件应具有的基本要求与功能是实现用户信息数据包括与用户有关的数据 的管理与操作处理,基于MY SQL的数据库的数据管理使该软件有更优异的性能,软件的基本数据流动为用户数据的输入,用户信息及数据的输出。 c、输出 用户基本信息和聊天容 d、输入 用户根据自身需要,发起聊天 e、安全方面的要求 设置管理员 2.2 目标 该软件的设计目标必须尽量达到人力与设备费用的节省,软件的整个设计过程必须通过生产能力的提高、人员工作效率的提高等等使软件开发成本最小化。 2.3 条件、假定和限制 a、本聊天室建议使用寿命为5-10年 b、法律方面的限制:(1)、严禁危害国家信息安全(2)、严禁损害国家荣誉和利益(3)、严禁传播不良信息(5)、严禁抄袭 2.4 进行可行性研究的方法 成本效益分析、对估算问题的看法、软件的作用围、软件的成本估算、速度安排

聊天室设计报告

聊天室设计报告

————————————————————————————————作者:————————————————————————————————日期: ?

网 络 聊 天 系 统 设 计 报 告 组长:靳子豪 组员:冯凯强、许玉军、王明明

完成时间:2015年11月3日 一、可行性研究报告 可行性研究报告(ISO标准) 编者说明: 在立项时,应该对项目进行综合分析,探讨项目的经济、社会、技术可行性,从而为决策提供基础。该模板为ISO标准文档模板,其不仅适用于软件项目,对于其它的系统项目也适用。 1.引言 1.1 编写目的 该聊天室项目可行性研究报告是对项目课题的全面考虑,是项目分析员对下一步工作进行的前提,是软件开发人员正确成功开发项目的前提与基础。写可行性研究报告可以使软件开发团体尽可能早的估计研究课题的可行性,较早的认识到系统方案的缺陷,可以少花时间和精力,也可减少成本资金,避免专业性的问题。 1.2背景 a. 待开发系统的名称:信息交流系统 b 用户:大众 c.它基于web小浏览器的程序系统的设计与开发, 服务平台:appserv-win 开发语言:PHP 数据库:MY SQL 1.3定义 技术可行性:分析功能,性能以及限制条件,能否是一个技术上可实现的系统经济可行性:估计开发费用已及最终从开发成功的系统所获得的收入或利益,衡量比较支出的费用和收到的利益 1.4 参考资料 《软件工程导论》(第6版)清华大学出版社张海藩牟永敏编著 可行性研究的前提 2.1 要求 a、聊天室功能 用户的聊天功能,包括数据输入、修改、删除,并要达到界面美观又好、 使用方便 b、软件的性能 开发该软件应具有的基本要求与功能是实现用户信息数据包括与用户有关 的数据的管理与操作处理,基于MY SQL的数据库的数据管理使该软件有 更优异的性能,软件的基本数据流动为用户数据的输入,用户信息及数据的 输出。 c、输出 用户基本信息和聊天内容 d、输入 用户根据自身需要,发起聊天 e、安全保密方面的要求 设置管理员 2.2 目标

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聊天室系统程序设计 实验报告 院(系):信息与通信工程系 专业:计算机应用技术 班级: 学号: 姓名: 指导老师: 2013/6/8

目录 第一部分:系统设计总述 (2) 1.设计目的: (2) 2.设计总体要求: (2) 3.实现目的: (2) 第二部分:系统需求分析 (3) 1.系统任务描述 (3) 2.系统功能分析 (3) 3.系统可行性分析 (3) 第三部分:系统设计 (4) 1.系统总体结构设计 (4) 2.系统主体的处理流程 (5) 3.系统流程逻辑 (5) 第四部分:代码分析 (6) 1.服务器端部分代码 (6) 2.客户端部分代码 (6) 第五部分:系统的具体实现 (6) 界面设计 (6) 第六部分:小结 (10) 第七部分:参考文献 (10)

1.设计目的: 1.在开发技术和过程中,能够充分学习和使用JAVA的技术,进一步培养学生面向对象程序 设计的思想,加深对面向对象程序设计特性的理解。 2.学会Java程序开发的环境搭建与配置,并在实际运用中学习和掌握Java程序开发的全 过程。 3.进一步熟悉掌握Java程序设计语言的基础内容,如用户图形界面设计、文件和网络输入 输出流编程、Java数据库编程等。 4.通过亲自动手写程序,一方面拓展知识面,一方面锻炼调试能力。 2.设计总体要求: 1.问题的描述与程序将要实现的具体功能。 2.程序功能实现的具体设计思路或框架,并检查流程设计。 3.代码实现。 4.程序测试。 5.设计小结(包括) 3.实现目的: 本软件是一个实用聊天程序。项目要实现以下目标: 1)建立服务器端和客户端并进行连接; 2)利用线程设计结构合理,运行效率较高的聊天室; 3)实现写消息,发消息,回复,查看聊天记录等功能;

聊天室程序设计报告

实验5 掌握简单的网络通讯技术 实验6 掌握基于典型协议的的网络通讯技术 一实验目的 1.熟悉Socket的通讯机制,了解网络程序的设计方法。 2. 熟悉典型协议的通讯机制,掌握基于它们的网络系统设计方法。如TCP、UDP。 二实验环境 1.Windows7 2.Visual C++ 6.0 三实验程序设计 1.实验原理 1.C/S模式 C/S模式是指一个服务器同时为多个客户端服务。并发性是C/S模式的的基础,正是由于并发性的支持,多个客户端能够获得同一种服务,而不必等待服务器完成对上一个请求的处理。 在C/S模式中,当请求到达服务器时,服务器将它交给一个控制线程,它能与已有的线程并发的执行。 在设计并发服务器时,一般服务器代码由两部分组成,第一部分代码负责监听并接收客户端的请求,还负责为客户端请求创建新的服务线程;另一部分代码负责处理单个客户机请求,如与客户机交换数据,提供具体服务。 下图所示为服务器创建多个线程来为多个客户机服务。 2.基于TCP的socket通信 服务器与客户端是通过套接字来进行通信的。 在基于TCP的网络通信程序中,首先服务器端通过socket()函数创建套接字,然后通过bind()函数来命名套接字,调用listen()函数开启服务器端的监听。接着执行accept()函数来接收客户的连接,服务器阻塞等待客户连接请求,直到有客户请求连接。 客户端创建套接字,接着通过connect()函数请求连接服务器,连接成功后,就可以与服务器进行通信了。 服务器与客户机通过send()各recv()调用来进行信息的发送和接收。只有当有信息可接收时,recv()才返回,否则将阻塞。

Java聊天室课程设计报告

UML课程设计 题目网络聊天程序开发设计与实现 学号:201515614376 姓名:卫国辉 指导教师: 完成时间:2017年 12月

目录 1.摘要 (2) 2.绪论 0 2.开发环境 0 3.需求分析 (1) 3.1程序简介 (1) 3.2程序功能 (1) 4.系统设计 (2) 4.1概要设计 (2) 4.2详细设计 (2) 5.测试 (7) 6.结论 (9) 参考文献 (10)

摘要 本次训练主要是考查了对JA V A程序设计的综合运用,设计一个Socket 通信的聊天程序,用户可以通过程序进行聊天通信,但不支持用户自定义表情及图片的发送。 本程序设计也用到了一些相关的标准Java的类,给程序设计带来了许多的方便,但用那些要切记加相应的类的包,还有一些构造方法和个别接口方法。 本程序可以实现用户之间的一些简单的交互,虽然功能较少,但是我想通过这次程序设计来熟悉并且学习更多关于JA V A编程的东西,来便于以后可以使用。 关键词:java聊天

1.绪论 对于一个选择网络编程的人来说,必须要有足够的细心和耐心,因为编程一般来说是很枯燥的乏味的,而且程序会越来越复杂,它所用到的符号、标记很多,所以不能出点小错误的。还有,我们不能只是看程序,要学会把自己学的自己拿去实践,自己去编一些程序,培养自己的动手能力,掌握一些编程技巧,熟练运用自己学到的理论知识,这样在以后才能开发出属于自己的东西。 如今,随着科学技术的发展,计算机已成为了我们生活中必不可少的设备了,而掌握计算机知识和运用,又成了我们每一个人的目标了。现在IT行业的飞速发展,无不应正了以前、现在、将来计算机行业都是科学发展的主导行业。而这些基本上都建立在程序上的,所以程序员对计算机行业来说,可想而知有多么的重要了,他们所付出的每一滴汗水都将推动这个行业的发展。 现在我就用JA V A语言编写一个简单的程序——Java聊天程序。将所学的基本知识用到其中去,这里包括了构造方法,创建图形界面,引用类等等。这不仅能锻炼我的实践能力,同时也进一步复习和巩固了我所学的理论知识。对以前没有学好的还有督促和促进作用。而且,根据需要,还可以了解一些课外的知识。增加自己的知识面。 2.开发环境 在开发此聊天程序时,该项目所使用的软件开发环境如下: 操作系统:Windows 7 开发工具:eclipse3.2及其VE插件

聊天室课程设计报告

网络课程设计设计报告 题目:基于TCP SOCKET的JAVA聊天室 院系名称:计算机学院 专业名称:网络工程 班级: 学生姓名: 学号(8位): 指导教师: 设计起止时间:2011年6月20日~2011年7月1日

第一章功能分析 1.1 需求分析 人们日常生活中越来越多地使用聊天室这项应用来为自己的工作和学习服务。一个操作简单,界面友好、运行稳定的聊天室对于小型局域网的用户可以起到很好的交流作用。所谓聊天室就是一个可以让许多用户同时互相通信的网上园地,个人用户可以通过聊天室将自己融入整个主流社会中。 根据目前使用聊天室的用户需求显示,用户对于聊天室主要有以下几点要求: (1). 与聊天室成员一起聊天。 (2). 可以与聊天室成员私聊。 (3). 可以改变聊天内容风格。 (4). 用户注册(含头像)、登录。 (5). 服务器监控聊天内容。 (6). 服务器过滤非法内容。 (7). 服务器发送通知。 (8). 服务器踢人。 (9). 保存服务器日志。 (10).保存用户聊天信息。 该简易聊天室是为许多喜爱聊天的用户开发设计的,和许多大型的网络聊天室相比该小聊天室功能比较简单,但能实现基本的聊天功能,点对多、点对点聊天和基本的用户功能,登录、查看在线用户等。 1.2 软件功能描述 (1)、户设置:用户自定义自己的登录名,成功设置后,服务端能接收到新设置的用户名。 (2)、登录功能:在服务端开启的情况下,用户可以以自己自定义或者默认的登

录名和登录地址端口登录到客户端,并能在服务器端显示登录状态。 (3)、公聊:用户可以与“所有人”聊天,在线用户可正常接收并正确显示公聊消。 (4)、私聊:用在线用户和其他用户聊天。记录对于聊天室的其他用户是不可见的。 (5)、聊天心情:用户在聊天的过程中可以选择相应的心情来表达自己的情感。 (6)、系统消息:服务端运行,为每一个用户都能接收服务器端发送的信息提示信息。 (7)、用户的状态.每一个客户端用户都可以实时看到目前其他在线用户的状态。 (8)、用户剔除:用户可以被系统剔除,并重新登记登录名和地址。 (9)、用户退出:用户可以在正常情况下退出聊天室。 (10)、服务端控制:服务端开启的情况下,用户才能登陆成功和聊天;用户设置的地址端口也必须与服务端的侦听端口一致,否则不能登录。 第二章主要模块描述及流程图 2. 1 模块介绍 本聊天室分为聊天室服务端和聊天室客户端,服务端与客户端之间通过套接口Socket(TCP)连接。在java中使用套接口相当简单,Java API为处理套接口的通信提供了一个类https://www.doczj.com/doc/ca11135250.html,.Socket,服务器采用多线程以满足多用户的请

Java聊天室程序设计报告

计算机与信息科学系 课程设计报告 课程名称:面向对象程序设计—Java 设计题目: Java聊天室程序 专业: 学号: 姓名: 指导老师: 提交时间:2009-6-20

目录 第一章可行性分析报告 (3) 1.1 引言 (3) 1.1.1 编写目的 (4) 1.1.2项目背景 (4) 1.1.3参考资料 (4) 1.2 可行性分析 (5) 1.2.1系统简要描述 (5) 1.2.2系统流程图 (5) 1.2.3经济可行性分析 (5) 第二章需求规格说明书 (7) 2.1 编写目的 (8) 2.2 数据描述 (8) 2.2.1文字叙述 (9) 2.2.2系统数据流图 (9) 2.3 功能划分 (9) 第三章概要设计说明书 (9) 3.1 总体设计 (9) 3.1.1总体结构设计 (9) 3.2.接口设计 (11) 3.3 数据结构设计 (11) 3.3 运行设计 (12) 3.4 维护设计 (12) 第四章详细设计说明书 (12) 4.1 总体设计 (12) 4.1.1需求概要 (13) 4.1.2软件结构 (13) 4.2 模块程序流程 (13) 4.2.1用户登录模块 (13) 4.2.2注册模块 (14) 4.2.3系统总体流程图 (15) 第五章编码测试与实现说明 (15) 5.1 功能模块的测试 (15) 5.2 工作的过程 (16) 5.3 软件设计效果 (16) 第六章设计问题总计 (19) 第七章总结 (19)

可行性分析报告 1.引言 1.1编写目的:可行性研究的目的是为了对问题进行研究,以最小的代价在最短时间内确定问题是 否可解。经过对此项目进行详细调查研究,初拟系统实现报告,对软件开发中将要 面临的问题及其解决方案进行初步设计及合理安排。明确开发风险及其所带来的经 济效益。本报告经审核后,交软件经理审查。 1.2 项目背景: 开发软件名称:Java聊天室小软件 项目任务提出者:**高校 项目开发者:***软件开发小组 用户:**高校 实现软件单位:**高校 项目与其他软件,系统的关系: 开发环境:本项目采用客户机/服务器原理,服务器端采用Windows XP为操作系统的工作站,客户端的程序是建立在Window XP系统上,在JDK1.5上开发,JAVA程序工程采用JCreator、Elipse 为编程工具进行开发。 1.3定义: 事务流:数据进入模块后可能有多种路径进行处理。 主键:数据库表中的关键域。值互不相同。 外部主键:数据库表中与其他表主键关联的域。 1.3.2 缩写 系统:若未特别指出,统指本聊天室系统系统。 1.4 参考资料: 1.《软件工程导论》(第5版)张海藩清华大学出版社 2,《面向对象程序设计–JAVA》第二版张白一编著 3.《Java语言与面向对象程序设计》(清华大学出版)印雯编著 2.可行性研究的前提 2.1 要求 ●主要功能: (1)可以实现群聊的功能 (2)可以实现对注册人员的管理。 ●性能要求:注册人员变动的信息必须在允许的时间内反映在各个客户端,对注册人员的信息必 须无差错的存储在服务器上。对服务器上的数据必须进行及时正确的刷新。 ●输出要求:数据完整,详实。

JAVA聊天室课程设计报告含源代码压缩文件

J A V A聊天室课程设计报 告含源代码压缩文件 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

南京晓庄学院 《JAVA程序设计》 课程设计报告 题目: 姓名: 学号: 班级: 14软件工程3班 指导教师: 王峥 完成时间 成绩: 信息工程学院 2016年6月

目录 Java聊天室的设计与实现 引言 Java聊天室开发背景 在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似QQ、MSN,网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个有简单聊天功能的网络聊天程序;而且通过制作该程序还能更好的学习网络软件编程知识。 本程序设计简单可以实现在同一局域网的聊天,程序可以自动扫描已经上线的用户,上线用户可在同一聊天界面中实现群聊。如果需要与其中的用户进行交谈,则只需双击右侧用户列表,读取对方IP地址,便可在下面的输入框内输入信息进行发送,实现一对一私聊功能。 1.1Java聊天室开发的目的和意义 目的:(1)理解进程消息通信的概念,如何实现两个创建进程之间的数据传递。 (2)理解进程共享变量的进程通信。 (3)熟悉并掌握java语言的代码编写 (4)熟练使用开发工具Eclipse (5)实现聊天室的一些基本功能 意义:(1)实现局域网中的信息交互,界面尽量人性化且美观,让用户便于接受

(2)用户及时获取自己想要的信息、促进交谈 (3)异常处理,对于用户错误的操作使用程序会有提示消息 (4)前期仅实现其基本雏形,后期可扩性很高,可实现统计在线人数,发送图片,界面美化,用户登陆注册信息的采集,连接到数据库etc. (5)后期可便于网站自身的广告宣传与商品推广 因所学知识和能力的局限性,仅能完成有限范围内的雏形生成与功能实现,后期的功能实现需要进一步的深入学习才能使本课程设计日益完善。 1.2完成的主要工作 (1)需求分析与总体设计、详细设计、代码分析 (2)实现程序所能运行的功能 (3)选择Window系统,并选择该操作系统中一种进程通信的方式。 (4)运用Eclipse开发工具和java语言实现该应用程序。

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

JAVA程序设计 多人聊天室 : ? #

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

System User Administrator Server Client Database House delete or add User logout Login and logout Chat Enter and leaveHouse User Info get and set Sign Up Start up server 5 概要设计 5.1 服务器设计 ? 将客户端的请求抽象化,每种请求服务器都会产生一个特定的类的对象去处理它。服务器负责接受客户端请求,根据请求内容完成指定工作。为提高效率,采用多线程结合线程池设计技术,对于每个请求在线程池内得到一个线程去处理请求。如图3-1所示。 5.2 客户端设计 聊天室中一个事物的过程基本流程是:用户产生动作,客户端发送消息,服务器接收并处理,服务器返回处理结果,GUI 根据结果进行显示的更新。客户端只在GUI 中采用多线程设计。而对服务器回应的接受都是单线程的因为只有一个服务器为自己服务,且在接收数据过程中连接是不可断开的。客户端的设计如图3-2所示。一次事物流程中的步骤编号在图中给出。

JAVA实训评测报告--聊天室

《Java实训》设计报告 电子信息项目学院 专业:软件技术 班级:1班 实训:聊天室

系统总体设计 1、设计思路 聊天系统的设计跟普通网站设计有着许多不同的地方,普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而聊天室只要提供满足访客双方直接实时聊天即可。因此,在设计聊天系统的过程中,必须要考虑好以下几个设计要点: 在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。 1.首先通过继承JFrame类构造服务器界面。 2.设计客户端程序使其能够完成正常的通信功能。 3.设计监听程序,使其显示登录的ip地址端口号,以及用户昵称,通过侦听按钮可以调用客户端程序,实现聊天功能。 2、各个模块详细的功能描述。 1、服务器端功能描述: 启动服务器端。 2、客户端功能描述: 启动客户端; 显示登录昵称: 显示聊天记录: 发送信息; 退出聊天室。 系统详细设计 1、界面设计 主要由类ChatRoom来实现,界面实际总体如下:输入昵称的文本框,输入IP地址的文本框以及输入端口的文本框;连接的按钮;退出按钮;接受消息的文本域;发送消息文本框;发送按钮。项目设计

在设计聊天室时,编写3个Java源文件:Client.java、Frame1.java、ServerThread.java; 分别放在两个包中,一个是client,放Client.java、Frame1.java;一个是server,放ServerThread.java;聊天室除了上述Java源文件所给出的类外,还需要Java系统提供的一些重要类,如JButton,JTextField等。 下面是Java源文件的总体设计。 Client<主类)客户端 Client类负责创建聊天室客户端的主窗口,该类含有main方法,计算器从该类开始执行。 ServerThread<主类)服务器 ServerThread类负责创建聊天室服务器的主窗口,该类含有main方法,计算器从该类开始执行。 二详细代码设计 聊天室程序设计详细代码如下: 客户端代码: package client。 import javax.swing.UIManager。 publicclass Client { public Client(>{ Frame1 frame=new Frame1(>。 frame.setVisible(true>。 frame.validate(>。 } publicstaticvoid main(String[] args>{ try{ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(>>。 }catch(Exception e>{ e.printStackTrace(>。 } new Client(>。 } } package client。 import java.awt.*。 import java.awt.event.*。 import javax.swing.*。 import https://www.doczj.com/doc/ca11135250.html,.*。

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

JAVA程序设计多人聊天室

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

System User Administrator Server Client Database House delete or add User logout Login and logout Chat Enter and leaveHouse User Info get and set Sign Up Start up server 4 概要设计 4.1 服务器设计 将客户端的请求抽象化,每种请求服务器都会产生一个特定的类的对象去处理它。服务器负责接受客户端请求,根据请求内容完成指定工作。为提高效率,采用多线程结合线程池设计技术,对于每个请求在线程池内得到一个线程去处理请求。如图3-1所示。 4.2 客户端设计 聊天室中一个事物的过程基本流程是:用户产生动作,客户端发送消息,服务器接收并处理,服务器返回处理结果,GUI 根据结果进行显示的更新。客户端

java局域聊天室实践总结

河北科技师范学院 JA V A程序设计课程设计 个人实习总结 实习类型课程设计 实习单位 指导教师 所在院(系)信息技术系 班级 姓名 学号_

一、实习时间和地点 时间:2015.3.17-2015.4.14 地点:F310、F311 二、实习的内容 我所开发的系统是:局域网聊天系统。系统功能简要说明如下: 该程序实现局域网内的聊天功能,包括服务器端程序和客户端程序两部分。1、服务器:负责处理各个客户端的信息,并负责将信息进行转发。①服务器主要负责响应客户端的的各种信息,包括链接服务器,用户信息发送,各个客户端的信息相互转发。②服务器的实现有Server类,Server类主要是进行初始化的工作2、客户端:用户使用界面,负责接受信息以及与服务器进行通信。①客户端负责为用户提供聊天界面,将信息发送至服务器,接受服务器的反馈信息等一系列的工作。②客户端的实现有Client类,Client类负责与服务器,其它客户端进行通信。 1.连接:点击“连接”按钮之后将信息发送到服务器端,服务器端创建相应的连接,并将更新后的用户列表发送给所有用户。 2.发送:根据发送者、发送对象、发送的话创建一个字段发送到服务器端。 3.清空:清空客户端接收信息聊天对话框。 4.私聊TA:选择在线主机ip,根据ip地址发送一个私密聊天请求到服务器,服务器选择相

应的地址进行信息发送。本程序可以有多个用户,只需在一台服务器上运行服务端程序,所有的用户连接上了之后就可以正常通信。 人们日常生活中越来越多地使用聊天室这项应用来为自己的工作和学习服务。一个操作简单,界面友好、运行稳定的聊天室对于小型局域网的用户可以起到很好的交流作用。所谓聊天室就是一个可以让许多用户同时互相通信的网上园地,个人用户可以通过聊天室将自己融入整个主流社会中。因此我们这个聊天室选择了简洁的界面搭建。因为之前学过JFrame类的使用,所以界面搭建部分代码如下: public class TCPClient extends JFrame { public static String olip; private static final long serialVersionUID = 1L; JTextArea jtaContent = new JTextArea(); JTextField jtaInstant = new JTextField(); JButton jbSend = new JButton("发送"); JButton jbConnect = new JButton("连接"); JButton jbClear = new JButton("清空"); JLabel jlTip=new JLabel("在线主机"); JButton jbPChat=new JButton("私聊TA"); JPanel jpBtns = new JPanel(); JPanel jpContact=new JPanel(); public void launchFrame() { jtaContent.setEditable(false); jpBtns.setLayout(new GridLayout(1, 3, 5, 5)); jpBtns.add(jbConnect); jpBtns.add(jbSend); jpBtns.add(jbClear); jpBtns.setBounds(0, 375, 350, 30); JScrollPane jspText=new JScrollPane(jtaInstant); jspText.setBounds(0, 310, 350, 65); JScrollPane jspContactOL=new JScrollPane(jcbContact); JScrollPane jspContent=new JScrollPane(jtaContent); jspContent.setBounds(0, 0, 350, 300); jpContact.setLayout(new GridLayout(5, 5, 1, 3)); jpContact.add(jlTip); jpContact.add(jspContactOL); jpContact.add(jbPChat); jpContact.setBounds(350, 0, 135, 220);

聊天室课程设计报告

在线聊天系统 指导老师:xx 学号:xxxxxx 姓名:xx 日期:2014.5.21

目录 第一章、绪论 (2) 1.1选题的背景 (3) 1.2 选题的目的和意义 (3) 1.3 可行性分析 (3) 第二章、需求分析 (3) 2.1系统名称 (4) 2.2任务概述 (4) 2.3设计目的 (4) 2.4系统功能 (4) 2.5详细功能 (4) 第三章、总体设计 (4) 3.1 系统的名称和目标 (5) 第四章、界面设计 (5) 第五章、主要源代码 (7) 5.1 index (7) 5.2 index2 (9) 5.3 main (11) 第六章、设计心得 (18) 第一章、绪论

1.1选题的背景 繁忙的工作使人们没有时间去跟远方的亲戚朋友相聚,昂贵的电话费使我们不能聊的尽兴,因此网络聊天诞生了,并且成为了时下极为流行的一种沟通方式,特别是在现代高新的技术推动下,在线聊天呈现出良好的势头和广阔的前景。人们只需要有一台电脑,连上网就可以聊天了。在聊天室里,你可以尽情的跟朋友聊天,共同讨论问题,不用担心会花很多钱,而且还可以用各种表情来表达你的喜怒哀乐,还可以跟朋友一起玩游戏,和朋友一起分享你喜欢的歌。而随着软件开发在中国的快速崛起,使得越来越多的年轻有志向为软件事业奉献人加入到软件开发这个大家庭来,而当前最为快速的web 开发语言java 有着其天生的优越性。 基于以上这些优点,使用frame 框架加JSP 设计出一个高效的网上聊天室,并作为毕业设计研究课题具有非常重要的研究价值。 1.2选题的目的和意义 这次我所设计的课题正是互联网与社会生活之间的紧密关系的体现,现今的社会,人们已经离不开了网络,网络已经成为人与人之间交流的一种形式,他能够把事情的复杂化转为简单化。伴随着互联网的飞速发展,对作为人们交流的研究和设计变得越来越重要。同时人们更亲睐可以实时进行沟通的方式,于是在线聊天室应运而生。本程序的主要模块有四个:用户注册模块,管理员管理模块,主要的聊天模块和收发信息模块。 1.3可行性分析 可行性分析(Feasibility Analysis)也称为可行性研究,是在系统调查的基础上,针对新系统的开发是否具备必要性和可能性,对新系统的开发从技术、经济、社会的方面进行分析和研究,以避免投资失误,保证新系统的开发成功。可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。该系统的可行性分析包括以下几个方面的内容。 第二章、需求分析

相关主题
文本预览
相关文档 最新文档