图形界面的一对多聊天软件.doc
《图形界面的一对多聊天软件.doc》由会员分享,可在线阅读,更多相关《图形界面的一对多聊天软件.doc(25页珍藏版)》请在沃文网上搜索。
1、网络编程技术大作业说明书题 目: 图形界面的一对多聊天软件课 程: 网络编程技术 院 (部): 计算机科学与技术专 业: 网络工程班 级: 学生姓名: 指导教师: 完成日期: 山东建筑大学计算机学院大作业设计说明书目 录图形界面的一对多的聊天软件的设计与实现1一、问题描述1二、小组成员及任务分配1三、设计思想1四、系统结构1五、程序流程(或模块划分)2六、源程序8七、系统测试及操作界面24结 论27参考文献28山东建筑大学计算机学院大作业设计说明书图形界面的一对多的聊天软件的设计与实现一、问题描述利用Socket技术,编程实现一个图形界面的一对多的聊天软件。需求如下:一、建立聊天室,显示进入聊
2、天室和离开聊天室的客户信息。二、为每一对进行聊天的客户单独开一个图形界面的聊天窗口。三、保存客户的聊天记录,并可以在聊天窗口中打开查询这些聊天记录。二、小组成员及任务分配本组所有成员在此次软件开发过程中的任务分配情况:三、设计思想系统需求分析:控制端,服务器,客户端,发送消息,聊天记录;首先启动后出现控制端界面;由控制端产生服务器与客户端;开始聊天;存放与读取聊天记录;结束聊天。系统设计:控制端:显示进入聊天室和离开聊天室的客户信息,生成一对聊天室;服务器与客户端功能:输入聊天消息,发送消息,显示聊天消息,查看消息记录,退出;四、系统结构控制端:在构造方法中设计界面、读取哈希表(存放用户对象,
3、首次执行清空哈希表)、启动服务器(阻塞于accept()方法,等待用户连接);在事件监听器中监听启动客户端。服务器与客户端:设计界面;两者之间通过数据输入输出流交互信息;存放与读取消息记录采用数据输入输出流与文件输入输出流来实现;退出时告之对方己方已退出聊天室并告之控制台,结束聊天有两种形式:一是点击退出按钮,二是发送“bye”消息。五、程序流程(或模块划分)程序流程图:控制端:开 始构造chatRoom方法创建哈希表用于存储客户端对象监听动作事件server server2=new server();textf.getText()!=null请输入客户端名称否判断输入的内容是否一样table
4、.containskey(textf.getText()JOptionPane.showMessageDialog(null,”)是new Thread(new Runnable()客户端加入聊天室的线程方法否退 出是判断用户是否已经加入聊天室if (table.containsKey(textf.getText() JOptionPane.showMessageDialog(null, 该客户端已经开启,请重新输入客户端名!);extf.setText();服务器在构造方法中启动启动客户端方法new Thread(new Runnable()public void run()String s
5、tr1=textf.getText();client1 c1=new client1();c1.test(str1);).start();主机接收 客户机 发来的消息,并将聊天记录存入文件fos=new FileOutputStream(src/chat/infoCache.txt,true);dos=new DataOutputStream(fos);din = new DataInputStream(socket.getInputStream();while (true) s2 = din.readUTF();texta.append(clientName+ 说: + s2 + n);do
6、s.writeUTF(clientName+ 说: + s2);if (s2.equalsIgnoreCase(bye) texta.append(断开连接 + n);chatRoom.texta.append(n+clientName+离开了聊天室,与+主机连接中断);din.close();dout.close();fos.close();dos.close();主机向客户机发送消息,并将聊天记录存入文件fos=new FileOutputStream(src/chat/infoCache.txt,true);dos=new DataOutputStream(fos);texta.appe
7、nd(主机 说: + s1 + n);dos.writeUTF(主机 说: + s1);主机读取消息记录:fis=new FileInputStream(src/chat/infoCache.txt);dis=new DataInputStream(fis);String str=dis.readUTF();while(!str.equals()te.append(n+str);str=dis.readUTF();客户机接收 主机 发来的消息,并将聊天记录存入文件din = new DataInputStream(client.getInputStream();fos=new FileOutp
8、utStream(src/chat/+clientName+.txt,true);dos=new DataOutputStream(fos);while (true) s2 = din.readUTF();texta1.append(主机 说: + s2 + n);dos.writeUTF(主机 说: + s2 );f (s2.equalsIgnoreCase(bye) texta1.append(断开连接 + n);chatRoom.texta.append(n+主机离开了聊天室,与+clientName+连接中断);din.close();dout.close();客户机向主机发送消息,并
9、将聊天记录存入文件s1 = textf1.getText().trim();texta1.append(clientName+ 说: + s1 + n);try dout = new DataOutputStream(client.getOutputStream();fos=new FileOutputStream(src/chat/+clientName+.txt,true);dos=new DataOutputStream(fos);dos.writeUTF(clientName+ 说: + s1);dout.writeUTF(s1);if (s1.equalsIgnoreCase(bye
10、) texta1.append(断开连接 + n);din.close();dout.close();客户机读取消息记录:fis=new FileInputStream(src/chat/+clientName+.txt);dis=new DataInputStream(fis);String str=dis.readUTF();while(!str.equals()te.append(n+str);str=dis.readUTF();六、源程序1、public class chatRoom extends JFrame implements ActionListenerJFrame j;st
11、atic ServerSocket server;DataInputStream din;DataOutputStream dout;String s1, s2, s3;JTextField textf;static JTextArea texta;JLabel label;JButton okbtn;JButton exbtn;JScrollPane scroll;Socket socket;String clientName=null;clientInfo client = null;Hashtable table = null;File file=new File(src/chat/cl
12、ientInfo.txt);FileInputStream in1 = null;ObjectInputStream in2 = null;FileOutputStream out1 = null;ObjectOutputStream out2 = null;public chatRoom() /构造方法j=new JFrame(聊天室);textf = new JTextField(20);label = new JLabel(输入客户端名);okbtn = new JButton(加入聊天室);exbtn = new JButton(退出);textf.addActionListener(
13、this);okbtn.addActionListener(this);exbtn.addActionListener(this);JPanel jp1 = new JPanel();jp1.add(label);jp1.add(textf);jp1.add(okbtn);jp1.add(exbtn);j.add(jp1, BorderLayout.SOUTH);texta = new JTextArea(12, 12);scroll = new JScrollPane(texta);j.add(scroll);j.setSize(600, 600);j.setVisible(true);j.
14、setBackground(Color.blue);j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);try /将哈希表从文件读出,并清空哈希表in1 = new FileInputStream(file);in2 = new ObjectInputStream(in1);table = (Hashtable) in2.readObject();table.clear();in1.close();in2.close(); catch (Exception ee) ee.printStackTrace();System.out.println(创建
15、哈希表出现问题!);texta.append(服务器正在端口号5500监听客户端的连接请求);server server2=new server();/调用服务器的方法server2.run();public static void main(String args) / TODO Auto-generated method stubchatRoom cr=new chatRoom();public void actionPerformed(ActionEvent e) /监听动作事件,实现触发的动作事件/ TODO Auto-generated method stubif(e.getSour
16、ce()=okbtn)client=new clientInfo();if (textf.getText()!=null) if (table.containsKey(textf.getText() JOptionPane.showMessageDialog(null, 该客户端已经开启,请重新输入客户端名!);textf.setText();else/client.setStrName(textf.getText();try out1 = new FileOutputStream(file);out2 = new ObjectOutputStream(out1);table.put(text
17、f.getText(), client);out2.writeObject(table);out2.close();out1.close(); catch (Exception ee) ee.printStackTrace();new Thread(new Runnable()public void run()String str1=textf.getText();client1 c1=new client1();c1.test(str1);).start(); texta.append(n+textf.getText()+加入了聊天室);textf.setText();if(e.getSou
18、rce()=exbtn)System.exit(0);2、public class server public void run()/ServerSocket serSkt=null;Socket csSkt=null;chatServer server1;tryserSkt=new ServerSocket(5500);/在端口号5500实例化一个对象catch(IOException e)e.printStackTrace();while(true)trySystem.out.println(服务器正在5500端口监听客户的连接请求);csSkt=serSkt.accept();/等待客户
19、机的连接server1=new chatServer(csSkt);new Thread(server1).start();/调用服务器类的run方法,接受客户机发送来消息catch(IOException e)e.printStackTrace();3、public class chatServer extends JFrame implements ActionListener,RunnableDataInputStream din;DataOutputStream dout;String s1, s2, s3;JTextField textf;JTextArea texta;JLabel
20、 label;JButton okbtn;JButton exbtn;JButton infoRecord;JScrollPane scroll;JFrame j1;Socket socket;String clientName=null;FileInputStream fis;FileOutputStream fos;DataInputStream dis;DataOutputStream dos;public chatServer(Socket s) throws IOException /构造方法j1=new JFrame(主机);textf = new JTextField(20);l
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形界面 一对 聊天 软件