第四次过程性考核

码云:https://gitee.com/yyh1234/fourth_process_assessment/tree/master

*160120 

使用套接写连接编写一个简单的聊天室程序,客户端主函数放在Client_Main.java文件中,服务器端主函数放在Server_Main.java文件中 

要求: 

  • 1.客户端从控制台进行输入,并将客户端的输出内容和时间保存到“学号.txt”文件中
  • 2.服务器端读取到客户端的程序后,给客户端以回应,并将客户端的输入内容与服务端的输出内容、时间保存到文本文件中
  • 3.要求服务器端可以实现同时与多个客户端进行通信,与每一个客户端通信的内容,保存为一个“学号_ip.txt”的文件
  • 4.4.提交文件结果包括:代码,通信后生成的txt文件

程序设计思路:先编写代码,让客户端和服务器能通信,在添加日志文件

运用到的知识点:多线程,文件的输入与存储,套接字

 

客户端:

  1 import java.awt.EventQueue;
  2 import java.awt.event.ActionEvent;
  3 import java.awt.event.ActionListener;
  4 import java.io.*;
  5 import java.net.*;
  6 import java.util.*;
  7 
  8 import javax.swing.JButton;
  9 import javax.swing.JFrame;
 10 import javax.swing.JLabel;
 11 import javax.swing.JPanel;
 12 import javax.swing.JScrollPane;
 13 import javax.swing.JTextArea;
 14 import javax.swing.JTextField;
 15 import javax.swing.SwingConstants;
 16 import javax.swing.border.EmptyBorder;
 17 public class Client extends JFrame {
 18     private JPanel contentPane;
 19     private Socket socket;
 20     private JTextArea textArea;
 21     private JTextField textField;
 22     private JTextField textField1;
 23     private OutputStream out;
 24     private InputStream is;
 25     public static void main(String[] args) {
 26         EventQueue.invokeLater(new Runnable() {
 27             public void run() {
 28                 try {
 29                     Client frame = new Client();
 30                     frame.setVisible(true);
 31                 } catch (Exception e) {
 32                     e.printStackTrace();
 33                 }
 34             }
 35         });
 36     }
 37     public Client() throws UnknownHostException, IOException {
 38         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 39         setBounds(100, 100, 450, 300);
 40         contentPane = new JPanel();
 41         contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
 42         setContentPane(contentPane);
 43         contentPane.setLayout(null);
 44         
 45         JPanel panel = new JPanel();
 46         panel.setBounds(10, 10, 398, 39);
 47         contentPane.add(panel);
 48         
 49         JLabel lblNewLabel = new JLabel("\u6635\u79F0\uFF1A");
 50         panel.add(lblNewLabel);
 51         
 52         textField = new JTextField();
 53         textField.setText("\u6E38\u5BA2");
 54         panel.add(textField);
 55         textField.setColumns(20);
 56         
 57         JScrollPane scrollPane = new JScrollPane();
 58         scrollPane.setBounds(10, 59, 398, 143);
 59         contentPane.add(scrollPane);
 60         
 61         textArea = new JTextArea();
 62         scrollPane.setViewportView(textArea);
 63         
 64         JPanel panel1 = new JPanel();
 65         panel1.setBounds(10, 212, 398, 39);
 66         contentPane.add(panel1);
 67         
 68         JLabel lblNewLabel_1 = new JLabel("\u8F93\u5165\u804A\u5929\u5185\u5BB9");
 69         panel1.add(lblNewLabel_1);
 70         
 71         textField1 = new JTextField();
 72         panel1.add(textField1);
 73         textField1.setColumns(20);
 74         
 75         JButton btnNewButton = new JButton("\u53D1\u9001");
 76         btnNewButton.addActionListener(new ActionListener() {
 77             public void actionPerformed1(ActionEvent e) {
 78                 try{
 79                     out=socket.getOutputStream();
 80                     String name=textField.getText()+":";
 81                     String text=name+textField1.getText()+"\n";
 82                     out.write(text.getBytes());
 83                     out.flush();
 84                     textField1.setText("");
 85                 }catch(IOException e1){
 86                     e1.printStackTrace();
 87                 }
 88             }
 89 
 90             public void actionPerformed(ActionEvent arg0) {
 91                 
 92             }
 93         });
 94         btnNewButton.setHorizontalAlignment(SwingConstants.RIGHT);
 95         panel1.add(btnNewButton);
 96         
 97         socket=new Socket("127.0.0.1",8889);
 98         receiveMessage();
 99     }
100 
101     private void receiveMessage() {
102         new Thread(){
103             public void run(){
104                 try{
105                     is=socket.getInputStream();
106                     Scanner scan=new Scanner(is);
107                     while(socket.isConnected()){
108                         String text=scan.nextLine()+"\n";
109                         textArea.append(text);
110                         sleep(100);
111                     }
112                 }catch(Exception e){
113                     e.printStackTrace();
114                 }
115             }
116         }.start();
117     }
118 }

服务器:

 1 import java.io.*;
 2 import java.net.*;
 3 import java.util.*;
 4 public class Server {
 5     static ArrayList<Socket> clients=new ArrayList<Socket>();
 6     public static void main(String[] args) {
 7         try{
 8             ServerSocket server=new ServerSocket(8889);
 9             System.out.println("服务器已经启动......");
10             while(true){
11                 Socket socket=server.accept();
12                 clients.add(socket);
13                 transmitMessage(socket);
14             }
15         }catch(IOException e){
16             e.printStackTrace();
17         }
18     }
19     private static void transmitMessage(final Socket socket) {
20         new Thread(){
21             private Scanner scan;
22             public void run(){
23                 try{
24                     InputStream is=socket.getInputStream();
25                     scan=new Scanner(is);
26                     socket.getOutputStream().write("连接成功...\n".getBytes());
27                 }catch(IOException e1){
28                     e1.printStackTrace();
29                 }
30             
31             while(true){
32                 String text=scan.nextLine()+"\n";
33                 for(Socket client:clients){
34                     try{
35                         OutputStream out=client.getOutputStream();
36                         out.write(text.getBytes());
37                         out.flush();
38                     }catch(IOException e){
39                         e.printStackTrace();
40                     }
41                 }
42             }
43         }
44     }.start();
45 }
46 }

运行结果:未完成,消息无法发出,故无结果

总结:通过这次综合性的考核,暴露出的问题过于严重,平时学的内容过于死板,不会灵活变通,导致平时课上训练时就会出现只知道这么做,为什么?不知道,也就是不求甚解,由于自己的接收能力差,导   致课上所学内容不能即时消化,但课余时间练习时,又因为不理解,所以只是机械的敲代码,起不到复习效果,并且由于一种畏惧感,在出现错误时,无法修改,因为怕牵一发动全身,最后整个代码乱七八糟,所以出现错误时只是推倒重头再来,改错能力没有得到锻炼,平时所学半知半解,这个会点那个会点,知识碎片化,不能形成体系,做题时出现我知道要用到这个用到那个,怎么用?不知道。 这个畏惧感是我个人目前亟需解决的问题,不只是在这里,因为这个畏惧感在其他方面也给我带来了很多麻烦,不够创实,过于求稳,不求有功但求无过是我的心理状态的真实写照,每次想打破这个畏惧感又会因为自己的鲁莽行为做出令我尴尬的事,甚至后悔的事,从而变回原样。现在我亟需查缺补漏,将过去留下的坑坑一点点填满,还要大量实践,增加自己动手操作能力。

学习内容 代码(行) 博客(字)
第一次过程性考核 30 240
第二次过程性考核 125 320
第三次过程性考核 66 300
第四次过程性考核 164 400
总计 385 1260
posted @ 2018-12-15 18:00  CH厉风  阅读(211)  评论(2编辑  收藏  举报