图形界面的一对多聊天软件.doc

上传人:精*** 文档编号:869369 上传时间:2023-11-15 格式:DOC 页数:25 大小:114.96KB
下载 相关 举报
图形界面的一对多聊天软件.doc_第1页
第1页 / 共25页
图形界面的一对多聊天软件.doc_第2页
第2页 / 共25页
图形界面的一对多聊天软件.doc_第3页
第3页 / 共25页
图形界面的一对多聊天软件.doc_第4页
第4页 / 共25页
图形界面的一对多聊天软件.doc_第5页
第5页 / 共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

21、abel = new JLabel(发送消息);okbtn = new JButton(发送);infoRecord=new JButton(消息记录);exbtn = new JButton(退出);textf.addActionListener(this);okbtn.addActionListener(this);exbtn.addActionListener(this);infoRecord.addActionListener(this);JPanel jp2 = new JPanel();jp2.add(label);jp2.add(textf);jp2.add(okbtn);jp2

22、.add(infoRecord);jp2.add(exbtn);j1.add(jp2, BorderLayout.SOUTH);texta = new JTextArea(12, 12);scroll = new JScrollPane(texta);j1.add(scroll);j1.setSize(600, 600);j1.setVisible(true);j1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);socket=s;din=new DataInputStream(s.getInputStream();dout=new Data

23、OutputStream(s.getOutputStream();clientName=din.readUTF();System.out.println(同+clientName+ +socket.getInetAddress().toString()+,+socket.getPort()+建立连接,开始聊天);public void run() /接收客户机发来的消息,并将聊天记录存入文件try fos=new FileOutputStream(src/chat/infoCache.txt,true);dos=new DataOutputStream(fos);din = new DataI

24、nputStream(socket.getInputStream();while (true) s2 = din.readUTF();texta.append(clientName+ 说: + s2 + n);dos.writeUTF(clientName+ 说: + s2);if (s2.equalsIgnoreCase(bye) texta.append(断开连接 + n);chatRoom.texta.append(n+clientName+离开了聊天室,与+主机连接中断);din.close();dout.close();fos.close();dos.close(); catch (

25、IOException e) / TODO Auto-generated catch blockSystem.out.println(链接已经断开!);public void exit() /断开连接try dout.writeUTF(主机离开了聊天室);din.close();dout.close();dos.close();fos.close();chatRoom.texta.append(n+主机离开了聊天室,与+clientName+连接中断); catch (Exception e) /System.exit(0);public void actionPerformed(Action

26、Event e) /动作事件监听器,实现触发的事件/ TODO Auto-generated method stubif (e.getSource() = okbtn) s1 = textf.getText().trim();try fos=new FileOutputStream(src/chat/infoCache.txt,true);dos=new DataOutputStream(fos);texta.append(主机 说: + s1 + n);dos.writeUTF(主机 说: + s1); catch (FileNotFoundException e2) / TODO Auto

27、-generated catch blocke2.printStackTrace();catch(IOException e1)try dout = new DataOutputStream(socket.getOutputStream();dout.writeUTF(s1);if (s1.equalsIgnoreCase(bye) texta.append(断开连接 + n);din.close();dout.close(); catch (Exception e1) textf.setText();textf.requestFocus();if(e.getSource()=infoReco

28、rd)JDialog jd=new JDialog();jd.setTitle(主机和客户机的消息记录);JTextArea te = new JTextArea(120, 120);JScrollPane roll = new JScrollPane(te);te.setEditable(false);jd.add(roll);jd.setSize(600, 600);jd.setVisible(true);jd.setBackground(Color.blue);jd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);try fis=ne

29、w FileInputStream(src/chat/infoCache.txt);dis=new DataInputStream(fis);String str=dis.readUTF();while(!str.equals()te.append(n+str);str=dis.readUTF(); catch (Exception e1) System.out.println(文件读取完毕);if (e.getSource() = exbtn) exit();4、public class client1 public void test(String strName)/此参数方法,调用 ch

30、atClient()类的构造方法 String host=localhost; int port=5500; /String clientName=客户1; try new chatClient(host,port,strName); catch(IOException e) e.printStackTrace(); 5、public class chatClient extends JFrame implements ActionListener,Runnable Socket client;DataInputStream din;DataOutputStream dout;String s

31、1, s2, s3;JTextField textf1;JTextArea texta1;JLabel label1;JButton okbtn1;JButton exbtn1;JButton infoRecord1;JScrollPane scroll1;JFrame j2;String clientName=null;FileInputStream fis;FileOutputStream fos;DataInputStream dis;DataOutputStream dos;public chatClient(String host,int port,String strName) t

32、hrows UnknownHostException, IOException /构造方法j2=new JFrame();j2.setTitle(strName);textf1 = new JTextField(20);label1 = new JLabel(发送消息);okbtn1 = new JButton(发送);infoRecord1=new JButton(消息记录);exbtn1 = new JButton(退出);textf1.addActionListener(this);okbtn1.addActionListener(this);exbtn1.addActionListen

33、er(this);infoRecord1.addActionListener(this);JPanel jp3 = new JPanel();jp3.add(label1);jp3.add(textf1);jp3.add(okbtn1);jp3.add(infoRecord1);jp3.add(exbtn1);j2.add(jp3, BorderLayout.SOUTH);texta1 = new JTextArea(12, 12);scroll1 = new JScrollPane(texta1);j2.add(scroll1);j2.setSize(600, 600);j2.setVisi

34、ble(true);j2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);clientName=strName;client=new Socket(host,port);din=new DataInputStream(client.getInputStream();dout=new DataOutputStream(client.getOutputStream();dout.writeUTF(clientName);run();public void run() /接受 主机 发来的消息,并将聊天记录存入文件try din = new Dat

35、aInputStream(client.getInputStream();fos=new FileOutputStream(src/chat/+clientName+.txt,true);dos=new DataOutputStream(fos);while (true) s2 = din.readUTF();texta1.append(主机 说: + s2 + n);dos.writeUTF(主机 说: + s2 );if (s2.equalsIgnoreCase(bye) texta1.append(断开连接 + n);chatRoom.texta.append(n+主机离开了聊天室,与+

36、clientName+连接中断);din.close();dout.close(); catch (Exception e) public void exit() /断开和主机的连接try /dout = new DataOutputStream(client.getOutputStream();dout.writeUTF(clientName+离开了聊天室);din.close();dout.close();dos.close();fos.close();chatRoom.texta.append(n+clientName+离开了聊天室,与+主机连接中断); catch (IOExcepti

37、on e) e.printStackTrace();public void actionPerformed(ActionEvent e) /动作事件监听器,实现触发的事件if (e.getSource() = okbtn1) s1 = textf1.getText().trim();texta1.append(clientName+ 说: + s1 + n);try dout = new DataOutputStream(client.getOutputStream();fos=new FileOutputStream(src/chat/+clientName+.txt,true);dos=n

38、ew DataOutputStream(fos);dos.writeUTF(clientName+ 说: + s1);dout.writeUTF(s1);if (s1.equalsIgnoreCase(bye) texta1.append(断开连接 + n);din.close();dout.close(); catch (IOException e1) / TODO Auto-generated catch blocke1.printStackTrace();textf1.setText();textf1.requestFocus();if(e.getSource()=infoRecord1

39、)/跳出一个文本框,显示聊天记录JDialog jd=new JDialog();jd.setTitle(clientName+的消息记录);JTextArea te = new JTextArea(120, 120);JScrollPane roll = new JScrollPane(te);te.setEditable(false);jd.add(roll);jd.setSize(600, 600);jd.setVisible(true);jd.setBackground(Color.blue);jd.setDefaultCloseOperation(JDialog.DISPOSE_ON

40、_CLOSE);try 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(); catch (Exception e1) / TODO Auto-generated catch block/e1.printStackTrace();System.out.println(文件读取完毕);if (e.getSource() = exbtn1) exit();6、public class clientInfo implements java.io.Serializable/为哈希表中的VALUE,创建clientInfo类String strNa

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业设计

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922