java课程设计局域网的聊天和文件传输.doc

上传人:laozhun 文档编号:2387032 上传时间:2023-02-17 格式:DOC 页数:30 大小:346.50KB
返回 下载 相关 举报
java课程设计局域网的聊天和文件传输.doc_第1页
第1页 / 共30页
java课程设计局域网的聊天和文件传输.doc_第2页
第2页 / 共30页
java课程设计局域网的聊天和文件传输.doc_第3页
第3页 / 共30页
java课程设计局域网的聊天和文件传输.doc_第4页
第4页 / 共30页
java课程设计局域网的聊天和文件传输.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《java课程设计局域网的聊天和文件传输.doc》由会员分享,可在线阅读,更多相关《java课程设计局域网的聊天和文件传输.doc(30页珍藏版)》请在三一办公上搜索。

1、目 录1 前言12 需求分析12.1 任务和要求12.2 运行环境12.3 开发工具13 分析和设计13.1 系统分析及设计思路13.2 主要类图13.3 系统流程74 具体代码实现85 课程设计总结255.1 程序运行结果或预期运行结果255.2 设计结论27参考文献27致 谢291 前言编写一个程序来模拟实现局域网的聊天和文件传输,通过编写一个文件服务器程序和一个聊天服务器程序来监听文件的发送和聊天,当有文件传输或聊天事件发生时,如果同意事件的进行,则通过输入流、输出流对文件或聊天信息进行传送,那么接收的,如果是文件就选择保存路径保存,如果是聊天信息就再聊天对话框的信息显示栏里显示,当有一

2、方终止连接,能告知对方,整个事件结束。2 需求分析2.1 任务和要求编写一个程序来实现局域网的聊天和文件传输,具体要求如下:(1)具有一个较好的可视化界面,大体做到美观、大方。(2)能进行聊天和文件传输,在传送文件时,接收方要有选择接不接收的权力。(3)在聊天时,如果没有和对方连接成功,信息发送框为不可编辑状态。(4)当在成员列表中双击某个成员时,系统自动和对方连接。(5)连接成功,就能正常聊天,且聊天时不能发送空信息。(6)在一方主动终止连接时,要及时通知对方,提示“对方已终止连接!”。2.2 运行环境(1)WINDOWS2000/XP系统(2) editplus 或eclipse2.3 开

3、发工具Java 3 分析和设计3.1 系统分析及设计思路3.1.1系统的理论基础(1)TCP/IP协议网络编程中两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服

4、务时向服务器提 出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也 能及时得到服务。(2)基于Socket的java网络编程Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。Server端Listen(监听)某个端口是否有连接请求,Client端向Server 端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Cli

5、ent 端都可以通过Send,Write等方法与对方通信。对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤: 创建Socket; 打开连接到Socket的输入/出流; 按照一定的协议对Socket进行读/写操作; 关闭Socket.(在实际应用中,并未使用到显示的close,虽然很多文章都推荐如此,不过在我的程序中,可能因为程序本身比较简单,要求不高,所以并未造成什么影响。)3.1.2系统的设计本系统大体由对话框模块、文件服务器模块、聊天服务器模块、文件发送模块、文件接收模块、聊天信息发送模块、聊天信息接收的模块、信息打印显示模块、文件 选择模块、成员列表

6、装载模块等。下面列出部分设计:(1)文件发送服务器的设计文件服务器是用来监听是否要传递文件,如果连接成功,有文件发送则创建一个功能齐全的Socket来传递文件,主要的代码为:class FileServer extends Threadpublic void run()tryServerSocket MyServer = new ServerSocket(4331);while(true)Socket si = MyServer.accept();int yon;yon= JOptionPane.showConfirmDialog(null,si.getInetAddress().getHos

7、tAddress() + 向你发出文件接收,接收?,文件接收,JOptionPane.YES_NO_OPTION); if(yon=JOptionPane.YES_OPTION) new fileAccepter(si).start(); else OutputStream os = si.getOutputStream(); os.write(false.getBytes(); os.close(); si.close(); catch(Exception event8) (2)文件接收的设计文件接收是把通过socket流发来的字节流,还原成相应的文件,主要代码为:class fileAcc

8、epter extends Thread byte dataAccepter; Socket s; FileOutputStream fos; OutputStream acceptOS; InputStream acceptIS; ObjectInputStream ois;public fileAccepter(Socket sx) s = sx; JFrame frame = new JFrame();public void run() dataAccepter = new byteDEFAULT_DATASIZE;FileDialog fd=new FileDialog(frame,f

9、ile save dialog,FileDialog.SAVE); fd.setFile(unname); fd.setVisible(true); String dir = fd.getDirectory(); int i = 0,j = 0;System.out.println(dir);if(dir=null) try OutputStream os = s.getOutputStream(); os.write(false.getBytes(); os.close(); catch(Exception event) else try acceptOS = s.getOutputStre

10、am(); acceptIS = s.getInputStream(); ois = new ObjectInputStream(acceptIS); acceptOS.write(true.getBytes(); acceptNameCarryer = (MyVector)ois.readObject(); acceptOS.write(ok.getBytes(); for(i = 0;i acceptNameCarryer.size();i+) fos = new FileOutputStream(dir + acceptNameCarryer.elementAt(i); note(文件

11、+ acceptNameCarryer.elementAt(i) + 正在接收); while(true) j = acceptIS.read(dataAccepter); String str = new String(dataAccepter,0,j); if(str.equals(over) note(文件 + acceptNameCarryer.elementAt(i) + 接收完毕); break; else fos.write(dataAccepter,0,j); fos.close(); catch(Exception event) finally try s.close();

12、acceptOS.close(); acceptIS.close(); ois.close(); catch(Exception event) (3)文件选择模块设计 文件选择模块是用来选择需要传送的文件并载入fileCarryer中,代码为:public void fileSelect()FileDialog fd = new FileDialog(this,file load dialog,FileDialog.LOAD); fd.setVisible(true); boolean repeat = false; String dir = fd.getDirectory() + fd.ge

13、tFile(); if(dir.equals(nullnull) else for(int i = 0;i realFileCarryer.size();i+) if(File)realFileCarryer.elementAt(i).getPath().equals(dir) repeat = true; if(repeat = false) File file = new File(dir); realFileCarryer.addElement(file); fileCarryer.addElement(fd.getFile() + 长度: + file.length(); sendNa

14、meCarryer.addElement(fd.getFile(); fileLength.addElement(file.length(); else JOptionPane.showMessageDialog(null,已存在此文件!); 3.2 主要类图图3.1 线程类图图3.2 主类test1类图3.3 系统流程开始结束创建对话框对各组件监听行创建聊天服务器创建文件服务器进行聊天进行文件传请求文件发送选择聊天对象图3.3 系统流程4 具体代码实现(主要源代码)import java.awt.*;import java.awt.event.*;import .*;import javax

15、.swing.*;import javax.swing.border.*;import java.awt.image.BufferedImage;import java.util.*;import java.io.*;public class test1 extends JFrame public int DEFAULT_DATASIZE = 1024 * 10;public int DEFAULT_DELAY = 1000;boolean flag = false;private JTextArea sendmessage = new JTextArea(); private JTextAr

16、ea showmessage = new JTextArea(); private JSplitPane SplitPane; private JButton toolFontButton; private JButton toolFaceButton;private JButton button; private JButton button_1; private JButton button_2;private JButton button_3; private JButton button_4; private JButton button_5; private JButton butt

17、on_6;private String bgbottomc = ImageManager.getImageURL(loginbc.png);private Image bottoml = ImageManager.getImageWithImgName(loginbl.png);private Image bottomr = ImageManager.getImageWithImgName(loginbr.png);private TexturePaint bottomcPaint = ImageManager.createTexturePaint(bgbottomc);DefaultList

18、Model fileCarryer = new DefaultListModel();DefaultListModel clientCarryer = new DefaultListModel();MyVector sendNameCarryer = new MyVector();MyVector acceptNameCarryer = new MyVector();MyVector realFileCarryer = new MyVector();MyVector fileLength = new MyVector();MyVector ipCarryer;JList JList1 = ne

19、w JList(clientCarryer);JList JList2 = new JList(fileCarryer);Dimension screenSize; Dimension frameSize; Socket socket = new Socket(); Socket so = new Socket(); InputStream clientin=null;OutputStream clientout=null;InputStream serverin=null;OutputStream serverout=null; FileOutputStream fos= null; pri

20、vate JScrollPane leftscroll = new JScrollPane(showmessage); private JScrollPane rightscroll = new JScrollPane(JList1); private JScrollPane rightscroll_2 = new JScrollPane(JList2); private JScrollPane bottomscroll = new JScrollPane(sendmessage); String str=;test1() setBounds(100,100,542,512); SplitPa

21、ne = new JSplitPane(); SplitPane.setResizeWeight(0.1); SplitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT); SplitPane.setDividerLocation(387); SplitPane.setDividerSize(10); SplitPane.setEnabled(false); SplitPane.setOneTouchExpandable(true); SplitPane.setBorder(new TitledBorder(null, , TitledBorder

22、.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null);/ 设置面版的边框getContentPane().add(SplitPane, BorderLayout.CENTER);/ 将分割面版添加到上级容器中*/JPanel Leftpanel = new JPanel(); Leftpanel.setLayout(new BorderLayout();SplitPane.setLeftComponent(Leftpanel); JPanel Toppanel = new JPanel(); Toppanel.se

23、tPreferredSize(new Dimension(0, 300); Toppanel.setLayout(new BorderLayout(); showmessage.setEditable(false);showmessage.setBackground(new Color(252,255,255); showmessage.setBorder(new TitledBorder(null, ,TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION, null, null); JLabel chatLabel

24、= new JLabel(聊天信息:); Toppanel.add(chatLabel,BorderLayout.NORTH);Toppanel.add(leftscroll,BorderLayout.CENTER);Leftpanel.add(Toppanel,BorderLayout.NORTH);JPanel Bottompanel = new JPanel();Bottompanel.setLayout(new BorderLayout(); Leftpanel.add(Bottompanel,BorderLayout.CENTER);JPanel toolpanel = new JP

25、anel(); toolpanel.setBackground(new Color(240,255,255); toolpanel.setLayout(new GridLayout(1,0); toolpanel.setPreferredSize(new Dimension(0, 25); Bottompanel.add(toolpanel,BorderLayout.NORTH); toolFontButton = createButton(/1.jpg); toolpanel.add(toolFontButton); toolFaceButton = createButton(/2.jpg)

26、; toolpanel.add(toolFaceButton); button = createButton(/3.jpg); toolpanel.add(button); button_1 = createButton(/4.jpg); toolpanel.add(button_1); button_2 = createButton(/5.jpg); toolpanel.add(button_2);button_3 = createButton(/6.jpg); toolpanel.add(button_3); button_3.addActionListener(new ActionLis

27、tener() public void actionPerformed(ActionEvent event) fileSelect(); ); button_4 = createButton(/7.jpg); toolpanel.add(button_4); button_5 = createButton(/8.jpg); toolpanel.add(button_5); button_6 = createButton(/9.jpg); toolpanel.add(button_6); sendmessage.setEditable(false);JList1.addMouseListener

28、(new MouseAdapter() public void mouseClicked(MouseEvent evt) JList1 = (JList)evt.getSource(); if (evt.getClickCount() = 1) if (evt.getClickCount() = 2) note(正在和+JList1.getSelectedValue()+连接。); if(str.equals() try str =JList1.getSelectedValue().toString(); InetAddress address = InetAddress.getByName(

29、String)ipCarryer.elementAt(JList1.getSelectedIndex(); InetSocketAddress socketAddress = new InetSocketAddress(address, 7777); socket.connect(socketAddress); clientin= socket.getInputStream(); clientout = socket.getOutputStream(); sendmessage.setEditable(true); flag=true; note(连接+JList1.getSelectedVa

30、lue()+成功!); new chatrecieve().start(); sendmessage.requestFocus(); setTitle(正在和+JList1.getSelectedValue()+聊天); catch (IOException ee) JOptionPane.showMessageDialog(null,对方不在线,请稍后再试!); note(连接+JList1.getSelectedValue()+失败); try if(str.equals(JList1.getSelectedValue().toString(); else str = JList1.get

31、SelectedValue().toString(); if(flag) try clientout.write(over.getBytes(); clientout.flush(); catch(Exception eventb) else try serverout.write(over.getBytes(); serverout.flush(); catch(Exception eventa) socket.close(); sendmessage.setEditable(true); if (socket.isConnected() else InetAddress address =

32、 InetAddress.getByName(String)ipCarryer.elementAt(JList1.getSelectedIndex(); InetSocketAddress socketAddress = new InetSocketAddress(address, 7777); socket.connect(socketAddress); clientin= socket.getInputStream(); clientout = socket.getOutputStream(); sendmessage.setEditable(true); flag=true; note(

33、连接+JList1.getSelectedValue()+成功!); new chatrecieve().start(); sendmessage.requestFocus(); setTitle(正在和+JList1.getSelectedValue()+聊天); catch (IOException ee) JOptionPane.showMessageDialog(null,对方不在线,请稍后再试!); note(连接+JList1.getSelectedValue()+失败); setTitle(); ); sendmessage.setBorder(new TitledBorder(

34、null, ,TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION, null, null);/ 设置面版的边框 Bottompanel.add(bottomscroll,BorderLayout.CENTER); JButton sendButton = createButton(/110.jpg); JButton submitButton = createButton(/111.jpg); sendButton.addActionListener(new ActionListener()public void a

35、ctionPerformed(ActionEvent e) String s = sendmessage.getText();if (!sendmessage.getText().trim().isEmpty() try note(自己:+s);if(flag)clientout.write(s.getBytes();clientout.flush();sendmessage.setText();serverout.write(s.getBytes();serverout.flush();sendmessage.setText(); catch (IOException ev) ev.prin

36、tStackTrace(););sendpanel.setLayout(new FlowLayout(FlowLayout.RIGHT,1,1);sendpanel.add(sendButton);sendpanel.add(submitButton); Bottompanel.add(sendpanel,BorderLayout.SOUTH); submitButton.addActionListener(new ActionListener()public void actionPerformed(ActionEvent ep)System.exit(0););JPanel listpan

37、el = new JPanel();listpanel.setLayout(new BorderLayout(); SplitPane.setRightComponent(listpanel); rightscroll.setBorder(new TitledBorder(null, ,TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION, null, null);JPanel righttop = new JPanel(); rightscroll.setBackground(new Color(252,255,25

38、5); righttop.setLayout(new BorderLayout(); righttop.setPreferredSize(new Dimension(0, 250);listpanel.add(righttop,BorderLayout.NORTH);JTextField Txt = new JTextField(文件名 文件大小);Txt.setEditable(false); Txt.setBackground(new Color(252,255,255);righttop.add(Txt,BorderLayout.SOUTH);righttop.add(rightscroll,BorderLayout.CENTER); JLabel listLabel = new JLabel(成员列表:); righttop.add(listLabel,BorderLayout.NORTH);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号