A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

发一个我大三java期末考试的时候的上机试题,本题25分,全卷100分。
1.JAVA编程:用TCP实现聊天室功能,程序有两个文件Server.java和Client.java,请完成程序的空余部分。
  1. //Server.java
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import java.io.*;
  5. import java.net.*;
  6. import java.util.*;
  7. import javax.swing.*;
  8. class RecvMegSock extends Thread
  9. {
  10.     LinkedList SocketList = null;
  11.     Socket ClientSock = null;
  12.     JTextArea jTextArea1;
  13.    
  14.     RecvMegSock(LinkedList list,Socket s,JTextArea t)
  15.     {
  16.         SocketList = list;
  17.         jTextArea1 = t;
  18.         ClientSock = s;
  19.         start();
  20.     }
  21.     public void run()
  22.     {
  23.         while(true)
  24.         {
  25.             try
  26.             {
  27.                 DataInputStream in =  代码1         
  28.                 String word = in.readUTF();
  29.                 jTextArea1.setText(jTextArea1.getText() + word + "\n");
  30.                
  31.                 for(int i = 0;i < SocketList.size();i++)
  32.                 {
  33.                     Socket s = (Socket)SocketList.get(i);
  34.                     DataOutputStream out =    代码2      
  35.                     out.writeUTF(   代码3       );
  36.                 }
  37.             }
  38.             catch (IOException ex)
  39.             {              
  40.                 for(int i = 0;i < SocketList.size();i++)
  41.                 {
  42.                     Socket s = (Socket)SocketList.get(i);
  43.                     if(s == ClientSock)
  44.                         SocketList.remove(s);
  45.                 }
  46.                 for(int i = 0;i < SocketList.size();i++)
  47.                 {
  48.                     Socket s = (Socket)SocketList.get(i);
  49.                     try
  50.                     {
  51.                         DataOutputStream out = new DataOutputStream(s.getOutputStream());
  52.                         out.writeUTF(ClientSock.getInetAddress() + "已经退出!!\n");
  53.                     }
  54.                     catch (IOException ex1)
  55.                     {   }
  56.                 }
  57.                 jTextArea1.setText(jTextArea1.getText() + ClientSock.getInetAddress() + "已经退出!!" + "\n");
  58.                 return;
  59.             }
  60.         }
  61.     }
  62. }

  63. class AcceptSockThread extends   代码4  
  64. {
  65.     ServerSocket ServerSock = null;   
  66.     LinkedList SocketList = null;
  67.     JTextArea TextArea;
  68.     AcceptSockThread(ServerSocket s,LinkedList list,JTextArea t)
  69.     {
  70.         ServerSock = s;
  71.         SocketList = list;
  72.         TextArea = t;
  73.         start();
  74.     }
  75.     public void run()
  76.     {
  77.         while(true)
  78.         {
  79.             Socket ClientSock = null;
  80.             try
  81.             {
  82.                 boolean same = false;
  83.                 ClientSock = ServerSock.   代码5     
  84.                 new RecvMegSock(SocketList,ClientSock,TextArea);
  85.                 SocketList.add(ClientSock);   
  86.                
  87.                 for(int i = 0;i < SocketList.size();i++)
  88.                 {
  89.                     Socket s = (Socket)SocketList.get(i);
  90.                     DataOutputStream out = new DataOutputStream(s.getOutputStream());
  91.                     out.writeUTF(ClientSock.getInetAddress() + "成功连接服务器\n");
  92.                 }
  93.                 TextArea.setText(TextArea.getText() + ClientSock.getInetAddress() + "连接到服务器\n");
  94.             }
  95.             catch (IOException ex)
  96.             {   }            
  97.         }
  98.     }
  99. }
  100. public class Server extends javax.swing.JDialog implements ActionListener
  101. {        
  102.     ServerSocket server = null;
  103.     LinkedList SocketList = null;
  104.     private javax.swing.JButton jButton1;
  105.     private javax.swing.JScrollPane jScrollPane1;
  106.     private javax.swing.JTextArea jTextArea1;
  107.     private javax.swing.JTextField jTextField1;
  108.     public Server(java.awt.Frame parent, boolean modal)
  109.     {
  110.         super(parent, modal);
  111.         initComponents();
  112.         try
  113.         {
  114.             server = new ServerSocket(8888);
  115.             SocketList = new LinkedList();
  116.             new AcceptSockThread(server,SocketList,jTextArea1);
  117.         }
  118.         catch (IOException ex)
  119.         {    }
  120.     }
  121.     @SuppressWarnings("unchecked")
  122.     private void initComponents() {
  123.         jScrollPane1 = new javax.swing.JScrollPane();
  124.         jTextArea1 = new javax.swing.JTextArea();
  125.         jTextField1 = new javax.swing.JTextField();
  126.         jButton1 = new javax.swing.JButton();
  127.         setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
  128.         getContentPane().setLayout(null);
  129.         jTextArea1.setColumns(20);
  130.         jTextArea1.setEditable(false);
  131.         jTextArea1.setRows(5);
  132.         jScrollPane1.setViewportView(jTextArea1);
  133.         getContentPane().add(jScrollPane1);
  134.         jScrollPane1.setBounds(10, 10, 380, 250);
  135.         getContentPane().add(jTextField1);
  136.         jTextField1.setBounds(10, 270, 290, 21);
  137.         jButton1.setText("发送");
  138.         jButton1.addActionListener(this);
  139.         jTextField1.addActionListener(this);
  140.         getContentPane().add(jButton1);
  141.         jButton1.setBounds(310, 270, 80, 25);
  142.         pack();
  143.     }
  144. public void actionPerformed(java.awt.event.ActionEvent evt) {
  145.     if(SocketList.size() == 0)
  146.     {
  147.         jTextArea1.setText(jTextArea1.getText() + "没有人连接!!" + "\n");
  148.         return;
  149.     }
  150.     for(int i = 0;i < SocketList.size();i++)
  151.     {
  152.         DataOutputStream out;
  153.         try
  154.         {
  155.             out = new DataOutputStream(((Socket) SocketList.get(i)).getOutputStream());
  156.             if(jTextField1.getText() != null)
  157.                 out.writeUTF("服务器: "+jTextField1.getText());            
  158.         }
  159.         catch (IOException ex)
  160.         {   }        
  161.     }   
  162.     jTextArea1.setText(jTextArea1.getText() + "服务器: "+ jTextField1.getText() + "\n");
  163. }
  164. public static void main(String args[])
  165.     {
  166.         Server dlg = new Server(null,true);
  167.         dlg.setBounds(300, 200, 400, 325);
  168.         dlg.addWindowListener(new WindowAdapter() {
  169.             public void windowClosing(WindowEvent e) {
  170.                     System.exit(0);
  171.             }
  172.         });
  173.         dlg.setVisible(true);
  174.     }
  175. }
复制代码

1 个回复

正序浏览

  1. //Client.java
  2. import java.awt.event.*;
  3. import java.io.*;
  4. import java.net.*;
  5. class RecvMegThread extends Thread
  6. {
  7.     DataInputStream in;
  8.     DataOutputStream out;
  9.     Socket ServerSock;
  10.     javax.swing.JTextArea TextArea;
  11.     Client MainDialog;
  12.     RecvMegThread(Client dlg)
  13.     {
  14.         MainDialog = dlg;
  15.         ServerSock = dlg.ServerSock;
  16.         TextArea = dlg.jTextArea1;
  17.         try
  18.         {
  19.             in = new DataInputStream(ServerSock.getInputStream());
  20.             out = new DataOutputStream(ServerSock.getOutputStream());
  21.         }
  22.         catch (IOException ex)
  23.         {     }        
  24.         start();
  25.     }
  26.     public void run()
  27.     {
  28.         while(true)
  29.         {
  30.             try
  31.             {
  32.                 String word = in.readUTF();
  33.                 TextArea.setText(TextArea.getText() + word + "\n");
  34.             }
  35.             catch (IOException ex)
  36.             {
  37.                 TextArea.setText(TextArea.getText() + "和服务器失去了联系!!" + "\n");
  38.                 MainDialog.ServerSock = null;
  39.                 return;
  40.             }
  41.         }
  42.     }
  43. }
  44. public class Client extends javax.swing.JDialog  implements ActionListener
  45. {
  46.     private javax.swing.JTextField IP;
  47.     private javax.swing.JTextField Port;
  48.     private javax.swing.JTextField Username;
  49.     private javax.swing.JButton jButton1;
  50.     private javax.swing.JButton jButton2;
  51.     private javax.swing.JLabel jLabel1;
  52.     private javax.swing.JLabel jLabel2;
  53.     private javax.swing.JLabel jLabel3;
  54.     private javax.swing.JScrollPane jScrollPane1;
  55.     public javax.swing.JTextArea jTextArea1;
  56.     private javax.swing.JTextField jTextField1;
  57.     Socket ServerSock;        
  58.     String username;
  59.     public Client(java.awt.Frame parent, boolean modal)
  60.     {
  61.         super(parent, modal);
  62.         initComponents();               
  63.     }
  64.    @SuppressWarnings("unchecked")
  65.     private void initComponents() {
  66.         jScrollPane1 = new javax.swing.JScrollPane();
  67.         jTextArea1 = new javax.swing.JTextArea();
  68.         jTextField1 = new javax.swing.JTextField();
  69.         jButton1 = new javax.swing.JButton();
  70.         jLabel1 = new javax.swing.JLabel();
  71.         IP = new javax.swing.JTextField();
  72.         jLabel2 = new javax.swing.JLabel();
  73.         Port = new javax.swing.JTextField();
  74.         jLabel3 = new javax.swing.JLabel();
  75.         Username = new javax.swing.JTextField();
  76.         jButton2 = new javax.swing.JButton();
  77.         setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
  78.         getContentPane().setLayout(null);
  79.         jTextArea1.setColumns(20);
  80.         jTextArea1.setEditable(false);
  81.         jTextArea1.setRows(5);
  82.         jScrollPane1.setViewportView(jTextArea1);
  83.         getContentPane().add(jScrollPane1);
  84.         jScrollPane1.setBounds(10, 40, 570, 220);
  85.         getContentPane().add(jTextField1);
  86.         jTextField1.setBounds(10, 270, 460, 21);
  87.         jButton1.setText("发送");
  88.         jButton1.addActionListener(this);
  89.         getContentPane().add(jButton1);
  90.         jButton1.setBounds(495, 270, 80, 25);
  91.         jLabel1.setText("服务器IP:");
  92.         getContentPane().add(jLabel1);
  93.         jLabel1.setBounds(10, 10, 70, 20);
  94.         IP.setText("127.0.0.1");
  95.         getContentPane().add(IP);
  96.         IP.setBounds(70, 10, 100, 21);
  97.         jLabel2.setText("端口:");
  98.         getContentPane().add(jLabel2);
  99.         jLabel2.setBounds(180, 10, 50, 20);
  100.         Port.setText("8888");
  101.         getContentPane().add(Port);
  102.         Port.setBounds(220, 10, 70, 21);
  103.         jLabel3.setText("用户名:");
  104.         getContentPane().add(jLabel3);
  105.         jLabel3.setBounds(300, 10, 70, 20);
  106.         Username.setText("无名氏");
  107.         getContentPane().add(Username);
  108.         Username.setBounds(360, 10, 100, 21);
  109.         jButton2.setText("连接");
  110.         jButton2.addActionListener(this);
  111.         jTextField1.addActionListener(this);
  112.         getContentPane().add(jButton2);
  113.         jButton2.setBounds(490, 10, 90, 25);
  114.         pack();
  115.     }

  116. public void actionPerformed(java.awt.event.ActionEvent evt) {
  117.     if ((evt.getSource()==jButton1)||(evt.getSource()==jTextField1))
  118.     {
  119.         if(ServerSock == null)
  120.         {
  121.             jTextArea1.setText(jTextArea1.getText() + "没有连接服务器!!" + "\n");
  122.             return;
  123.         }
  124.         try
  125.         {
  126.             DataOutputStream out = new DataOutputStream(ServerSock.getOutputStream());
  127.             if(jTextField1.getText() != null)
  128.                 out.writeUTF(username + ": " + jTextField1.getText());
  129.         }
  130.         catch (IOException ex)
  131.         {    }
  132.     }
  133.    if( evt.getSource()==jButton2 )
  134.    {
  135.         if(IP.getText().equals("") || Port.getText().equals("") )
  136.         {
  137.             this.jTextArea1.setText(this.jTextArea1.getText() + "IP 和 端口不能为空!!\n");
  138.             return;
  139.         }
  140.         try
  141.         {
  142.             Integer.parseInt(Port.getText());
  143.         }
  144.         catch(Exception e)
  145.         {
  146.             this.jTextArea1.setText(this.jTextArea1.getText() + "端口号应为数字!!\n");
  147.             return;
  148.         }
  149.         try
  150.         {
  151.             if(ServerSock != null)
  152.             {
  153.                 String str = "" + ServerSock.getInetAddress() + ServerSock.getPort();
  154.                 System.out.println(str);
  155.                 System.out.println("/" + IP.getText() + Port.getText());
  156.                 if(str.equals("/" + IP.getText() + Port.getText()))
  157.                 {
  158.                     this.jTextArea1.setText(this.jTextArea1.getText() + "已经连接了服务器!!\n");
  159.                     return;
  160.                 }
  161.             }
  162.             ServerSock = new Socket(IP.getText(), Integer.parseInt(Port.getText()));
  163.             username = Username.getText();
  164.             new RecvMegThread(this);
  165.         }
  166.         catch (Exception ex)
  167.         {
  168.             jTextArea1.setText(jTextArea1.getText() + "连接不上服务器!!\n");
  169.             return;
  170.         }
  171.   }
  172. }

  173.     public static void main(String args[])
  174.     {
  175.       
  176.         Client dlg = new Client(null,true);
  177.         dlg.setBounds(300, 200, 605, 340);
  178.         dlg.addWindowListener(new WindowAdapter() {
  179.             public void windowClosing(WindowEvent e) {
  180.                     System.exit(0);
  181.             }
  182.         });
  183.         dlg.setVisible(true);        
  184.     }
  185. }

复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马