java实训报告模板

                      

山西农业大学logo山西农业大学

软件学院

实 训 报 告

           实训项目:       java聊天工具   

               级:        软件1315      

               号:       20131614041   

               名:                     

           上课时间:2015.1. 12——2015.1.23 

          

            

                         教师 (签名)             

实训报告详细内容包括:

一.   实训每日报告

1.13

.通过这节课我学到了

1.通过继承线程类Thread编写线程。

2.通过实现Runnable接口来创建线程。

3.使用静态方法sleep()让线程沉睡若干秒。

4.使用whileif语句改变球的运动轨迹,实现反弹。

二.

import java.awt.*;

public class MyBall{

      public static void main(String args[]){

           Frame w= new Frame();

           w.setSize(300, 400);

           MyPanel2 mp = new MyPanel2();

           w.add(mp);

           Thread t = new Thread(mp);

           t.start();

           w.show();

      }

}

class MyPanel2 extends Panel implements Runnable{

      int x = 30;

      int y = 30;

      int f =0; //f== 0;f ==1;f == 2;f ==3

      public void paint(Graphics g){

           g.fillOval(x,y,20,20);

      }

      public void run(){

           while(true){

                 //定义飞行状态

           if(f==0){

                 x++;

                 y++;   

           }

           if(f==1){

                 x--;

                 y++;

           }

           if(f==2){

                 x--;

                 y--;

           }

           if(f==3){

                 x++;

                 y--;

           }

           //改变飞行姿势

           if(x>265){

                 if(f==0){

                      f=1;

                 } else {

                      f=2;

                 }

           }

           if(y>365){

                 if(f==1){

                      f=2;

                 } else {

                      f=3;

                 }

           }

           if(x<0){

                 if(f==2){

                      f=3;

                 }else{

                      f=0;

                 }

           }

           if(y<0){

                 if(f==3){

                      f=0;

                 }else{

                      f=1;

                 }

           }

           try{

           Thread.sleep(30);

           }catch(Exception e){}

           repaint();

           }

      }

}

.心得:通过这节课,使我真正感到java编程的神奇之处,明白了java实践的重要性,加深了我对编程的乐趣,使我更有信心学好这门课。

1.14

.通过这节课我学到了用MouseEventKeyEvent这两个事件类对应的接口以及接口中的方法实现画直线。

.

import java.awt.*;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.event.MouseMotionListener;

import javax.swing.*;

public class Huaxian {

      public static void main(String args[]){

           JFrame a=new JFrame();

           a.setSize(300, 400);

           JPanel4 b=new JPanel4();

           a.add(b);

           a.addMouseListener(b);

           b.addMouseListener(b);

           a.addMouseMotionListener(b);

           b.addMouseMotionListener(b);

           a.show();

      }

}

Class JPanel4 extends JPanel implements MouseListener,MouseMotionListener{

      int i=1;

      int x;

      int y;

      int x1;

      int y1;

      int[] x2=new int[9999];

      int[] y2=new int[9999];

      int[] x3=new int[9999];

      int[] y3=new int[9999];

      public void paint(Graphics g) {

           super.paint(g);

           g.setColor(Color.black);

           for(int i=0;i<9999;i++){

           g.drawLine(x2[i], y2[i], x3[i], y3[i]);

      }

           g.drawLine(x, y, x1, y1);

      }

      @Override

      public void mouseMoved(MouseEvent e) {

}

@Override

      public void mouseClicked(MouseEvent arg0) {

           // TODO 自动生成的方法存根

      }

      @Override

      public void mouseEntered(MouseEvent arg0) {

           // TODO 自动生成的方法存根 

      }

      @Override

      public void mouseExited(MouseEvent arg0) {

           // TODO 自动生成的方法存根

          

      }

      @Override

      public void mousePressed(MouseEvent e) {

           x=e.getX();

           y=e.getY();

           x2[i]=x;

           y2[i]=y;

      }

      @Override

      public void mouseDragged(MouseEvent e) {

           x1=e.getX();

           y1=e.getY();

           x3[i]=x2[i];

           y3[i]=y2[i];

           repaint();

      }

      @Override

      public void mouseReleased(MouseEvent e) {

           x1=e.getX();

           y1=e.getY();

           x3[i]=x1;

           y3[i]=y1;

           i++;

           repaint();

      }

}

.心得:通过这节课,使我真正感到java编程的神奇之处,明白了java实践的重要性,加深了我对编程的乐趣,使我更有信心学好这门课。

1.15

.通过这节课的学习,使我掌握了通过I/O设备流来实现QQ与服务器端与客户器端的联系。

.

1

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import java.io.*;

public class QQMain extends JFrame implements ActionListener{

      JTextField txtMess = new JTextField();

      JTextArea txtCon = new JTextArea();

      public QQMain(){

           //设置窗体属性

           this.setSize(400,500);

           this.setLocation(100,100);

           //new一大堆组件

           JComboBox cmbUser = new JComboBox();

           JButton btnSend =new JButton("发送");

           JScrollPane spCom = new JScrollPane(txtCon);

           //注册事件

           btnSend.addActionListener(this);

           //布置小面板

           JPanel panSmall = new JPanel();

           panSmall.setLayout(new GridLayout(1,2));

           panSmall.add(cmbUser);

           panSmall.add(btnSend);

           //布置大面板

           JPanel panBig = new JPanel();

           panBig.setLayout(new GridLayout(2,1));

           panBig.add(txtMess);

           panBig.add(panSmall);

           //布置窗体

           this.setLayout(new BorderLayout());

           this.add(panBig,BorderLayout.NORTH);

           this.add(spCom,BorderLayout.CENTER);

           //读聊天记录

           try{

                 File f = new File("d:/test/聊天记录.txt");

                 FileReader fr = new FileReader(f);

                 BufferedReader br = new BufferedReader(fr);

                

                 while(br.ready()){

                      txtCon.append(br.readLine()+"\n");

                 }

           }catch(Exception e){}

           this.setVisible(true);

      }

      @Override

      public void actionPerformed(ActionEvent e) {

           /tMess------------->> txtCon

           txtCon.append(txtMess.getText()+"\n");

           /tMess------------->> 聊天记录

           try{

                 File f = new File ("d:/test/聊天记录.txt");

                 FileWriter fw = new FileWriter(f,true);//,true 追加模式

                 PrintWriter pw = new PrintWriter(fw);

                 pw.println(txtMess.getText());

                 pw.close();

           }catch(Exception ee){}

           /tMess------------>> 网络上

           txtMess.setText("");

      }

}

2

import java.awt.*;

import java.net.*;

import java.io.*;

import javax.swing.*;

import java.awt.event.*;

public class QQLogin extends JFrame implements ActionListener{

      JTextField txtUser = new JTextField();

      JPasswordField txtPass = new JPasswordField();

      public QQLogin(){

           //设置窗体属性

           this.setSize(250, 125);

           this.setLocation(400,300);

           this.setTitle("QQ登录");

           //new一大堆组件

           JLabel labUser = new JLabel("用户名:");

           JLabel laPass = new JLabel("密码:");

           JButton btnLogin = new JButton("登录");

           JButton btnReg = new JButton("注册");

           JButton btnCancle =new JButton("取消");

           //注册事件

           btnLogin.addActionListener(this);

           btnReg.addActionListener(this);

           btnCancle.addActionListener(this);

           //布置输入面板

           JPanel  panInput = new JPanel();

           panInput.setLayout(new GridLayout(2,2));

           panInput.add(labUser);

           panInput.add(txtUser);

           panInput.add(laPass);

           panInput.add(txtPass);

           //布置按钮面板

           JPanel panButton = new JPanel();

           panButton.setLayout(new FlowLayout());

           panButton.add(btnLogin);

           panButton.add(btnReg);

           panButton.add(btnCancle);

           //布置窗体

           this.setLayout(new BorderLayout());

           this.add(panInput,BorderLayout.CENTER);

           this.add(panButton,BorderLayout.SOUTH);

      }

      public static void main(String args[]){

           QQLogin w = new QQLogin();

           w.setVisible(true);

      }

      @Override

      public void actionPerformed(ActionEvent e) {

           if(e.getActionCommand().equals("登录")){

                 String user = txtUser.getText();

                 String pass = txtPass.getText();

                 //将用户名和密码发送给服务器(2)

                 try{

                      Socket s = new Socket("127.0.0.1",8000);

                      OutputStream os = s.getOutputStream();

OutputStreamWriter osw = new OutputStreamWriter(os);

                      PrintWriter pw = new PrintWriter(osw,true);

                      pw.println(user+"%"+pass);

                      //接受服务器发送回来的确认信息(5)

                      InputStream is = s.getInputStream();

                      InputStreamReader isr= new InputStreamReader(is) ;

                      BufferedReader br = new BufferedReader(isr);

                      String yorn = br.readLine();

                      if(yorn.equals("ok")){

                            QQMain w = new QQMain();

                            w.setVisible(true);

                            this.setVisible(false);

                      }else {

                            System.out.println("");

                      }

                 }catch(Exception ee){}

           }

           if(e.getActionCommand().equals("注册")){

           }

           if(e.getActionCommand().equals("取消")){ 

           }

     }

}

3

package File;

import java.net.*;

import java.io.*;

public class MyServer {

      private static String uandp;

      public static void main(String args[]){

           try{

                 //1521 Oracle 1433SQLServer 3306MyAQL 8080Tomcat

                 ServerSocket ss=new ServerSocket(8000);

            Socket s=ss.accept();//阻塞式的操作

            InputStream is=s.getInputStream();

            InputStreamReader isr=new InputStreamReader(is);

            BufferedReader br=new BufferedReader(isr);

            String mess=br.readLine();

            //System.out.println(upndp);

            //拆分用户名和密码(3

            String user=mess.split("%")[0];

            String pass=mess.split("%")[1];

            System.out.println(user+""+pass);

            //验证(4

            //发送确认信息到客户端(6

            OutputStream os=s.getOutputStream();

           OutputStreamWriter osw=new  OutputStreamWriter(os);

            PrintWriter pw=new PrintWriter(osw);

            String yorn=br.readLine();

            System.out.println(yorn);

            if(user.equals("aaa")&&pass.equals("111")){

                pw.println("ok");

                System.out.println("success");

            }else{

                pw.println("err");

            }

      }catch(Exception e){

           e.printStackTrace();

      }

      }         

}

4

package File;

import java.net.*;

import java.io.*;

public class MyClient {

      public static void main(String args[] ){

           try{

                 Socket s=new Socket("127.0.0.1",8000);

                 OutputStream os=s.getOutputStream();

                 OutputStreamWriter osw=new OutputStreamWriter(os);

                 PrintWriter pw=new PrintWriter(osw,true);

                 pw.println("王洋");

                 InputStream is=s.getInputStream();

                 InputStreamReader isr=new InputStreamReader(is);

                 BufferedReader br=new BufferedReader(isr);

                 System.out.println(br.readLine());

           }catch(Exception e){}

      }

}

.每一节课都有不同的收获,通过这节课的学习使自己对编程的感兴趣更加深了一步,希望通过以后的努力,可以取得更大的进步。

1.16

.通过这节课我学到了在用Swing编写程序时利用JFrame创建窗体,并用布局管理器的方法实现qq登录。

.

package qqdenglu;

import java.awt.*;

import javax.swing.*;

public class QQLogin {

      public static void main(String args[]){

           JFrame w=new JFrame();

           w.setSize(250,125);

           w.setTitle("QQ登录");

           JLabel labUser=new JLabel("用户名:");

           JLabel labPass=new JLabel("密码:");

           JTextField txtUser=new JTextField();

           JPasswordField txtPass=new JPasswordField();

           JButton btnLogin=new JButton ("登录");

           JButton btnReg=new JButton ("注册");

           JButton btnCancel=new JButton ("取消");

           //布置输入面板

           JPanel panInput=new JPanel();

           panInput.setLayout(new GridLayout(2,2));

           panInput.add(labUser);

           panInput.add(txtUser);

           panInput.add(labPass);

           panInput.add(txtPass);

           //布置按钮面板

           JPanel panButton=new JPanel();

           panButton.setLayout(new FlowLayout());

           panButton.add(btnLogin);

           panButton.add(btnReg);

           panButton.add(btnCancel);

           //布置窗体

           w.setLayout(new BorderLayout());

           w.add(panInput,BorderLayout.CENTER);

           w.add(panButton,BorderLayout.SOUTH);

           w.show();

      }

}

.心得:通过这节课,使我真正感到java编程的神奇之处,明白了java实践的重要性,加深了我对编程的乐趣,使我更有信心学好这门课。

1.17

一,学习了注册事件,设置账号密码,引用成员变量,使用this关键字。

二,

登陆

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.*;

public class QQLogin1 extends JFrame implements ActionListener {

      JTextField textUser = new JTextField();

      JPasswordField textPass = new JPasswordField();

      public QQLogin1(){

           //设置窗体属性

           this.setSize(250, 125);

           this.setLocation(400, 300);

           this.setTitle("QQ登陆");

           //一大堆组件

           JLabel labUser = new JLabel("用户名");

           JLabel labPass = new JLabel("密码");

           JButton btnLogin = new JButton("登录");

           JButton btnReg = new JButton("注销");

           JButton btnCancel = new JButton("取消");

           //注册事件

           btnLogin.addActionListener(this);

           btnReg.addActionListener(this);

           btnCancel.addActionListener(this);

           //布置输入面板

           JPanel panInput = new JPanel();

           panInput.setLayout(new GridLayout(2,2));

           panInput.add(labUser);

           panInput.add(textUser);

           panInput.add(labPass);

           panInput.add(textPass);

           //布置按钮面板

           JPanel panButton = new JPanel();

           panButton.setLayout(new FlowLayout());

           panButton.add(btnLogin);

           panButton.add(btnReg);

           panButton.add(btnCancel);

           //布置窗体

           this.setLayout(new BorderLayout());

           this.add(panInput,BorderLayout.CENTER);

           this.add(panButton,BorderLayout.SOUTH);

      }

      public static void main(String[] args) {

           QQLoggin1 w = new QQLoggin1();

           w.setVisible(true);

      }

      public void actionPerformed(ActionEvent e) {

           if(e.getActionCommand().equals("登录")){

                 String user = textUser.getText();

                 String pass = textPass.getText();

                 if(user.equals("aaa")&&pass.equals("111")){

                      QQmain w = new QQmain();

                      w.setVisible(true);

                      this.setVisible(false);

                      System.out.println("欢迎");

                 }else{

                      System.out.println("输入有误,请重新输入");

                 }

         }

           if(e.getActionCommand().equals("注册")){

   }

           if(e.getActionCommand().equals("取消")){

            }

           }

      }

三,通过一遍又一遍的练习,加深了对程序的了解和记忆能力,更加喜欢上编程,写程序是一件看似枯燥实则有趣的事情。

1.18

.通过这节课,使我了解到常用I/O流的使用。实现了文件加密,文件解密和恢复文件。

二,

文件加密:

import java.io.*;

import javax.imageio.stream.FileImageInputStream;

public class ReadFile {

      public static void main(String args[]){

           try{

                 //读密钥文件

                 File keyFile = new File("d:/test/key.key");

                

                 FileInputStream keyFis = new FileInputStream(keyFile);

                 int [] key = new int[128];

                 for (int i = 0 ; i < 128 ; i++){

                      key[i] = keyFis.read();

                 }

                 //加密

                 File inFile = new File("d:/test/aaa.txt");

                 File outFile = new File("d:/test/bbb.txt");

                 FileInputStream fis = new FileInputStream(inFile);

                 FileOutputStream fos = new FileOutputStream(outFile);

                 int size= fis.available();

                 for(int i = 0 ; i < size ; i++){

                      fos.write(fis.read()+key[i%128]);

                 }

           }catch(Exception e){}

      }

}

文件解密:

import java.io.*;

public class ReadFile1 {

      public static void main(String args[]){

           try{

                 //读密钥文件

                 File keyFile = new File("d:/test/bbb.txt");

                 FileInputStream keyFis = new FileInputStream(keyFile);

                 int[] key = new int[128];

                 for( int i = 0 ; i < 128 ; i ++ ){

                       key[i] = keyFis.read();

                 }

                 //解密

                 File f = new File("d:/test/bbb.txt");

                 FileInputStream fis = new FileInputStream(f);

                 int size = fis.available();

                 for(int i = 0 ; i < size ; i ++){

                      System.out.println((char)(fis.read()-key[i%128]));

                 }

           }catch(Exception e){

                 e.printStackTrace();

           }

      }

}

恢复文件:

import java.io.*;

public class ReadTxtFile {

      public static void main(String args[]){

           try{

                 File inFile = new File("d:/test/aaa.txt");

                 File outFile = new File("d:/test/bbb.txt");

                 FileReader fr = new FileReader(inFile);

                 BufferedReader br = new BufferedReader(fr);

                 FileWriter fw = new FileWriter(outFile);

                 PrintWriter pw = new PrintWriter(fw);

                 while(br.ready()){

                      pw.println(br.readLine());

                 }

                 pw.close();

           }catch(Exception e){}

      }

}

三,虽然打字速度比较慢,但是通过一遍又一遍的练习,加深了对程序的了解和记忆能力,更加喜欢上编程,写程序是一件看似枯燥实则有趣的事情。

1.19:

.这节课我学到了通过socket来实现编程访问网页和实现监听。

.

package File;

import java.net.*;

import java.io.*;

public class MyWebServer {

      public static void main(String args[]){

           try{

                 ServerSocket ss=new ServerSocket(80);

                 Socket s=ss.accept();

                 InputStream is=s.getInputStream();

                 InputStreamReader isr=new InputStreamReader(is);

                 BufferedReader br=new BufferedReader(isr);

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

           }catch(Exception e){}

      }

}

package File;

import java.net.*;

import java.io.*;

public class MyIE {

      public static void main(String args[]){

           try{

                 Socket s=new Socket("www.sxau.edu.cn",80);

                 OutputStream os=s.getOutputStream();

                 OutputStreamWriter osw=new OutputStreamWriter(os);

                 PrintWriter pw=new PrintWriter(osw,true);

                 pw.println("GET / HTTP/1.1");

                 pw.println("Accept: text/html, application/xhtml+xml, */*");

                 pw.println("Accept-Language: zh-CN");

                 pw.println("User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0");

                 pw.println("UA-CPU: AMD64");

                 pw.println("Accept-Encoding: gzip, deflate");

                 pw.println("Host: 127.0.0.1");

                 pw.println("Connection: Keep-Alive");

                 pw.println("");  

                 InputStream is=s.getInputStream();

                 InputStreamReader isr=new InputStreamReader(is);

                 BufferedReader br=new BufferedReader(isr);

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

                 System.out.println(br.readLine());

           }catch(Exception e){

                 e.printStackTrace();

           }

      }

}

.通过这几天的实训,使自己比平时上课更加深入的了解了课本知识,对代码也有了更深一步的了解。这几天

1.20:

.这节课我学到了如何实现多个用户名和密码的QQ登录。

.

package File;

import java.net.*;

import java.io.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class MyServer {

      public static void main(String args[]){

           try{

                 //1521 Oracle 1433SQLServer 3306MyAQL 8080Tomcat  将服务器到8000端口监听(1

                 ServerSocket ss=new ServerSocket(8000);

                 while(true){

                 System.out.println("sever startup in 1000ms......");

            Socket s=ss.accept();//阻塞式的操作

            MyService t=new MyService();

            t.setSocket(s);

            t.start();

                 }  

      }catch(Exception e){

      }   

      }         

}

class MyService extends Thread{

      private Socket s;

      public void setSocket(Socket s){

           this.s=s;

      }

      public void run(){

           try{

                  //接收用户名和密码(2

            InputStream is=s.getInputStream();

            InputStreamReader isr=new InputStreamReader(is);

            BufferedReader br=new BufferedReader(isr);

            String upndp=br.readLine();

            //System.out.println(upndp);

            //拆分用户名和密码(4

            String user=upndp.split("%")[0];

            String pass=upndp.split("%")[1];

            System.out.println(user+""+pass);

            //验证(5

            File f=new File("d:/text/user.txt.txt");

            FileReader fr=new FileReader(f);

            BufferedReader fbr=new BufferedReader(fr);

            boolean yorn=false;

            while(fbr.ready()){

                String users=fbr.readLine();

                String uu=users.split("===")[0];

                String pp=users.split("===")[1];

                if(user.equals(uu)&&pass.equals(pp)){

                      yorn=true;

                      break;

                }

            }

            //发送确认信息到客户端(7

            OutputStream os=s.getOutputStream();

            OutputStreamWriter osw=new OutputStreamWriter(os);

            PrintWriter pw=new PrintWriter(osw,true);

            if(yorn){

                pw.println("ok");

                //接收客户端发送过来的信息(9

                while(true){

                      String message=br.readLine();

                      System.out.println(message);

                }

            }else{

                pw.println("err");

            }

           }catch(Exception e){}

      }

}

package File;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import java.io.*;

import java.net.*;

      public class QQlogin extends JFrame implements ActionListener{

           JTextField txtUser = new JTextField();

           JPasswordField txtPass = new JPasswordField();

           public QQlogin(){

                 //设置窗体属性

                 this.setSize(250, 125);

                 this.setLocation(400,300);

                 this.setTitle("QQ登录");

                 //new一大堆组件

                 JLabel labUser = new JLabel("用户名:");

                 JLabel laPass = new JLabel("密码:");

                 JButton btnLogin = new JButton("登录");

                 JButton btnReg = new JButton("注册");

                 JButton btnCancle =new JButton("取消");

                 //注册事件

                 btnLogin.addActionListener(this);

                 btnReg.addActionListener(this);

                 btnCancle.addActionListener(this);

                 //布置输入面板

                 JPanel  panInput = new JPanel();

                 panInput.setLayout(new GridLayout(2,2));

                 panInput.add(labUser);

                 panInput.add(txtUser);

                 panInput.add(laPass);

                 panInput.add(txtPass);

                 //布置按钮面板

                 JPanel panButton = new JPanel();

                 panButton.setLayout(new FlowLayout());

                 panButton.add(btnLogin);

                 panButton.add(btnReg);

                 panButton.add(btnCancle);

                 //布置窗体

                 this.setLayout(new BorderLayout());

                 this.add(panInput,BorderLayout.CENTER);

                 this.add(panButton,BorderLayout.SOUTH);

           }

           public static void main(String args[]){

                 QQlogin w = new QQlogin();

                 w.setVisible(true);

           }

           @Override

           public void actionPerformed(ActionEvent e) {

                 if(e.getActionCommand().equals("登录")){

                      String user = txtUser.getText();

                      String pass = txtPass.getText();

                      try{

                            //将用户名和密码发送给服务器(3

                            Socket s =new Socket("127.0.0.1",8000);

                            OutputStream os=s.getOutputStream();

                            OutputStreamWriter osw=new OutputStreamWriter(os);

                            PrintWriter pw=new PrintWriter(osw,true);

                            pw.println(user+"%"+pass);

                            System.out.println(user+" "+pass);

                            //接收服务器发送回来的确定信息(6)

                            InputStream is=s.getInputStream();

                            InputStreamReader isr=new InputStreamReader(is);

                            BufferedReader br=new BufferedReader(isr);

                            String yorn=br.readLine();

                            //显示主窗体(8

                            if(yorn.equals("ok")){

                                  QQmain w=new QQmain();

                                  w.setSocket(s);

                                  w.setVisible(true);

                                  this.setVisible(false);   

                            }

                      }catch(Exception ee){

                            ee.getStackTrace();

                      }

                 }

                 if(e.getActionCommand().equals("注册")){

                 }

                 if(e.getActionCommand().equals("取消")){

                 }

           }

      }

package File;

import java.awt.*;

import java.io.*;

import javax.swing.*;

import java.awt.event.*;

import java.awt.font.TextMeasurer;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileWriter;

import java.io.FilterReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.Socket;

public class QQmain extends JFrame implements ActionListener{

      JTextField txtMess = new JTextField();

      JTextArea txtCon = new JTextArea();

      public Socket s;

      public void setSocket(Socket s){

           this.s=s;

      }

      public QQmain(){

           //设置窗体属性

           this.setSize(400,500);

           this.setLocation(100,100);

           //new一大堆组件

          

          

           JComboBox cmbUser = new JComboBox();

           JButton btnSend =new JButton("发送");

           JScrollPane spCom = new JScrollPane(txtCon);

           //注册事件

           btnSend.addActionListener(this);

           //布置小面板

           JPanel panSmall = new JPanel();

           panSmall.setLayout(new GridLayout(1,2));

           panSmall.add(cmbUser);

           panSmall.add(btnSend);

           //布置大面板

           JPanel panBig = new JPanel();

           panBig.setLayout(new GridLayout(2,1));

           panBig.add(txtMess);

           panBig.add(panSmall);

           //布置窗体

           this.setLayout(new BorderLayout());

           this.add(panBig,BorderLayout.NORTH);

           this.add(spCom,BorderLayout.CENTER);

           //读聊天记录

           try{

                 File f=new File("d:/text/聊天记录.txt.txt");

                 FileReader fr=new FileReader(f);

                 BufferedReader br=new BufferedReader(fr);

                 while(br.ready()){

                      txtCon.append(br.readLine()+"\n");

                 }

           }catch(Exception e){}

           this.setVisible(true);

      }

      @Override

      public void actionPerformed(ActionEvent e) {

           //txtMess----------------------->>txtCon

            txtCon.append(txtMess.getText()+"\n");

           //txtMess---------------------------->>聊天记录

           try{

              File f=new File("d:/text/聊天记录.txt.txt");

              FileWriter fw=new FileWriter(f);//追加模式

              PrintWriter pw=new PrintWriter(fw);

              pw.println(txtMess.getText());

              pw.close();

      }catch(Exception ee){}

           //将信息发送到服务器上(10

           try{

              OutputStream os=s.getOutputStream();

       OutputStreamWriter osw=new OutputStreamWriter(os);

              PrintWriter pw=new PrintWriter(osw,true);

              pw.println(txtMess.getText());

                }catch(Exception ee){

              ee.getStackTrace();

           }

           //txtMess----------------------->>网络上

                 txtMess.setText("");

      }

}

.实训已快接近尾声,这几天的学习令我受益匪浅,我相信我会学好的。

1.21:

一,实现了多人互相聊天;

.

package File;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import java.io.*;

import java.net.*;

      public class QQlogin extends JFrame implements ActionListener{

           JTextField txtUser = new JTextField();

           JPasswordField txtPass = new JPasswordField();

           public QQlogin(){

                 //设置窗体属性

                 this.setSize(250, 125);

                 this.setLocation(400,300);

                 this.setTitle("QQ登录");

                 //new一大堆组件

                 JLabel labUser = new JLabel("用户名:");

                 JLabel laPass = new JLabel("密码:");

                 JButton btnLogin = new JButton("登录");

                 JButton btnReg = new JButton("注册");

                 JButton btnCancle =new JButton("取消");

                 //注册事件

                 btnLogin.addActionListener(this);

                 btnReg.addActionListener(this);

                 btnCancle.addActionListener(this);

                 //布置输入面板

                 JPanel  panInput = new JPanel();

                 panInput.setLayout(new GridLayout(2,2));

                 panInput.add(labUser);

                 panInput.add(txtUser);

                 panInput.add(laPass);

                 panInput.add(txtPass);

                 //布置按钮面板

                 JPanel panButton = new JPanel();

                 panButton.setLayout(new FlowLayout());

                 panButton.add(btnLogin);

                 panButton.add(btnReg);

                 panButton.add(btnCancle);

                 //布置窗体

                 this.setLayout(new BorderLayout());

                 this.add(panInput,BorderLayout.CENTER);

                 this.add(panButton,BorderLayout.SOUTH);

           }

           public static void main(String args[]){

                 QQlogin w = new QQlogin();

                 w.setVisible(true);

           }

           @Override

           public void actionPerformed(ActionEvent e) {

                 if(e.getActionCommand().equals("登录")){

                      String user = txtUser.getText();

                      String pass = txtPass.getText();

                      try{

                            //将用户名和密码发送给服务器(3

                            Socket s =new Socket("127.0.0.1",8000);

                            OutputStream os=s.getOutputStream();

OutputStreamWriter osw=new OutputStreamWriter(os);

                            PrintWriter pw=new PrintWriter(osw,true);

                            pw.println(user+"%"+pass);

                            System.out.println(user+" "+pass);

                            //接收服务器发送回来的确定信息(6)

                            InputStream is=s.getInputStream();

                           InputStreamReader isr=new InputStreamReader(is);

                            BufferedReader br=new BufferedReader(isr);

                            String yorn=br.readLine();

                            //显示主窗体(8

                            if(yorn.equals("ok")){

                                  QQmain w=new QQmain(user);

                                  w.setSocket(s);

                                  w.setVisible(true);

                                  this.setVisible(false);

                            }

                       }catch(Exception ee){

                            ee.getStackTrace();

                      }

                 }

                 if(e.getActionCommand().equals("注册")){

                 }

                 if(e.getActionCommand().equals("取消")){

                 }

                

           }

      }

package File;

import java.net.*;

import java.io.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import java.util.*;

public class MyServer {

      public static void main(String args[]){

           try{

                 //创建一个HashMap,用于存放用户名和对应的Socket

                 HashMap hm=new HashMap();

                 //1521 Oracle 1433SQLServer 3306MyAQL 8080Tomcat  将服务器到8000端口监听(1

                 ServerSocket ss=new ServerSocket(8000);

                 while(true){

                 System.out.println("sever startup in 1000ms......");

            Socket s=ss.accept();//阻塞式的操作

            MyService t=new MyService();

            t.setSocket(s);

            t.setHashMap(hm);

            t.start();

                 }

      }catch(Exception e){

      }   

      }         

}

class MyService extends Thread{

      private Socket s;

      private HashMap hm;

      public void setSocket(Socket s){

           this.s=s;

      }

      public void setHashMap(HashMap hm){

           this.hm=hm;

      }

           public void run(){

           try{

                  //接收用户名和密码(2

            InputStream is=s.getInputStream();

            InputStreamReader isr=new InputStreamReader(is);

            BufferedReader br=new BufferedReader(isr);

            String upndp=br.readLine();

            //System.out.println(upndp);

            //拆分用户名和密码(4

            String user=upndp.split("%")[0];

            String pass=upndp.split("%")[1];

            System.out.println(user+""+pass);

            //验证(5

            File f=new File("d:/text/user.txt.txt");

            FileReader fr=new FileReader(f);

            BufferedReader fbr=new BufferedReader(fr);

            boolean yorn=false;

            while(fbr.ready()){

                String users=fbr.readLine();

                String uu=users.split("===")[0];

                String pp=users.split("===")[1];

                if(user.equals(uu)&&pass.equals(pp)){

                      yorn=true;

                      break;

                }

            }

            //发送确认信息到客户端(7

            OutputStream os=s.getOutputStream();

            OutputStreamWriter osw=new OutputStreamWriter(os);

            PrintWriter pw=new PrintWriter(osw,true);

            if(yorn){

                pw.println("ok");

                //将自己的名字发给其他人

                for(Object temp:hm.values()){

                  Socket ts=(Socket)temp;

                  OutputStream tos=ts.getOutputStream();

                  OutputStreamWriter tosw=new OutputStreamWriter(tos);

                  PrintWriter tpw=new PrintWriter(tosw,true);

                  tpw.println("user%"+user);

                 }

                //同时将其他人的名字发给自己

                 for(Object temp:hm.keySet()) {

                   pw.println("user%"+(String)temp);

                 }

                //将用户名和对应的Socket存入HashMap

                hm.put(user, s);

                System.out.println(hm);

                //接收客户端发送过来的信息(9

                while(true){

                      String message=br.readLine();

                      String to=message.split("%")[0];

                      String mess=message.split("%")[1];

                      Object temp=hm.get(to);

                      Socket ts=(Socket)temp;

                      OutputStream tos=ts.getOutputStream();

 OutputStreamWriter tosw=new OutputStreamWriter(tos);

                  PrintWriter tpw=new PrintWriter(tosw,true);

                      tpw.println("mess%"+mess);

                      //System.out.println(message);

                }

            }else{

                pw.println("err");

            }

           }catch(Exception e){}

      }

}

package File;

import java.awt.*;

import java.io.*;

import javax.swing.*;

import java.awt.event.*;

import java.awt.font.TextMeasurer;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileWriter;

import java.io.FilterReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.Socket;

public class QQmain extends JFrame implements ActionListener,Runnable{

      //文本编辑框

      JTextField txtMess = new JTextField();

      //文本区域

      JTextArea txtCon = new JTextArea();

      //组合框

      JComboBox cmbUser = new JComboBox();

      public Socket s;

      public void setSocket(Socket s){

           this.s=s;

           Thread t=new Thread(this);

           t.start();

      }

      public QQmain(String title){

           //设置窗体属性

           this.setSize(400,500);

           this.setLocation(100,100);

           this.setTitle(title);

           //new一大堆组件

           JButton btnSend =new JButton("发送");

           JScrollPane spCom = new JScrollPane(txtCon);

           //注册事件

           btnSend.addActionListener(this);

           //布置小面板

           JPanel panSmall = new JPanel();

           panSmall.setLayout(new GridLayout(1,2));

           panSmall.add(cmbUser);

           panSmall.add(btnSend);

           //布置大面板

           JPanel panBig = new JPanel();

           panBig.setLayout(new GridLayout(2,1));

           panBig.add(txtMess);

           panBig.add(panSmall);

           //布置窗体

           this.setLayout(new BorderLayout());

           this.add(panBig,BorderLayout.NORTH);

           this.add(spCom,BorderLayout.CENTER);

           //读聊天记录

           try{

                 File f=new File("d:/text/聊天记录.txt.txt");

                 FileReader fr=new FileReader(f);

                 BufferedReader br=new BufferedReader(fr);

                 while(br.ready()){

                      txtCon.append(br.readLine()+"\n");

                 }

           }catch(Exception e){}

           this.setVisible(true);

      }

      @Override

      public void actionPerformed(ActionEvent e) {

            //txtMess----------------------->>txtCon

            txtCon.append(txtMess.getText()+"\n");

           //txtMess---------------------------->>聊天记录

           try{

              File f=new File("d:/text/聊天记录.txt.txt");

              FileWriter fw=new FileWriter(f);//追加模式

              PrintWriter pw=new PrintWriter(fw);

              pw.println(txtMess.getText());

              pw.close();

           }catch(Exception ee){}

           //将信息发送到服务器上(10

           try{

              OutputStream os=s.getOutputStream();

            OutputStreamWriter osw=new OutputStreamWriter(os);

              PrintWriter pw=new PrintWriter(osw,true);

                pw.println(cmbUser.getSelectedItem()+"%"+txtMess.getText());

           }catch(Exception ee){

              ee.getStackTrace();

           }

           //txtMess----------------------->>网络上

                 txtMess.setText("");

      }

      //接收线程

      @Override

      public void run() {

           try{

                 InputStream is=s.getInputStream();

                 InputStreamReader isr=new InputStreamReader(is);

                 BufferedReader br=new BufferedReader(isr);

                 while(true){

                      String message=br.readLine();

                      String to=message.split("%")[0];

                      String mess=message.split("%")[1];

                      if(to.equals("user")){

                            cmbUser.addItem(mess);

                      }

                      if(to.equals("mess")){

                            txtCon.append(mess+"\n");

                      }

                 }

           }catch(Exception e){}

           // TODO Auto-generated method stub

      }

}

三,通过学习,增加了兴趣。进一步掌握了编程思想。

1.22:

.复习QQ聊天程序的实现

.

package www;

import java.awt.*;

import java.io.*;

import java.net.*;

import java.util.*;

import javax.swing.*;

import java.awt.event.*;

public class QQServer {

      public static void main(String args[]){

           //创建HashMap,用于保存用户名和对应的Socket 15

           //服务器到8000端口监听7

           try{

                 HashMap hm=new HashMap();

                 ServerSocket ss=new ServerSocket(8000);

                 while(true){

                 System.out.println("Server statup in 1000ms........");

                 Socket s=ss.accept();

                 //启动服务线程8

                 MyService t=new MyService();

                 t.setSocket(s);

                 t.setHashMap(hm);

                 t.start();

                 }

           }catch(Exception e){}

      }

}

class MyService extends Thread{

      private HashMap hm;

      private Socket s;

      public void setSocket(Socket s){

           this.s=s;

      }

      public void setHashMap(HashMap hm) {

           // TODO Auto-generated method stub

      }

      public void run(){

           try{

           //接收用户名和密码9

           InputStream is=s.getInputStream();

           InputStreamReader isr=new InputStreamReader(is);

           BufferedReader br=new BufferedReader(isr);

        String upndp=br.readLine();

           //拆分11

           String user=upndp.split("%")[0];

           String pass=upndp.split("%")[1];

           //验证12

           File f=new File("d:/text/user.txt.txt");

           FileReader fr=new FileReader(f);

           BufferedReader fbr=new BufferedReader(fr);

           boolean yorn=false;

           while(fbr.ready()){

                 String users=br.readLine();

                 String uu=users.split("===")[0];

                 String pp=users.split("===")[1];

                 if(user.equals(uu)&&pass.equals(pp)){

                      yorn=true;

                      break;

                 }

           }

           //发送确认信息到客户端14

           OutputStream os=s.getOutputStream();

           OutputStreamWriter osw=new OutputStreamWriter(os);

           PrintWriter pw=new PrintWriter(osw,true);

           if(yorn){

                 pw.println("ok");

           }else{

                 pw.println("err");

           }

           //把自己的名字发送给其他人18

           //将其他人的名字发给自己19

           //将用户名和对应的Socket保存到HashMap16

           hm.put(user,s);

           //不断的接收信息并转发20

           }catch(Exception e){}

      }

}

package www;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import java.io.*;

import java.net.*;

public class QQmain extends JFrame implements ActionListener,Runnable {

      JTextField txtMess=new JTextField();

      JComboBox cmbUser=new JComboBox();

      JTextArea txtCon=new JTextArea();

   private Socket s;

    public void setSocket(Socket s){

      this.s=s;

      Thread t=new Thread(this);

      t.start();

}

           //主窗体界面2

      public QQmain(String title){

           //设置窗体属性

           this.setSize(400,500);

           this.setLocation(200, 200);

           this.setTitle(title);

           //new一大堆组件

           JScrollPane SpCon=new JScrollPane(txtCon);

           JButton btnSend=new JButton("发送");

           //注册事件

           btnSend.addActionListener(this);

           //布置小面板

           JPanel panSmall=new JPanel();

           panSmall.setLayout(new GridLayout(1,2));

           panSmall.add(cmbUser);

           panSmall.add(btnSend);

           //布置大面板

           JPanel panBig=new JPanel();

           panBig.setLayout(new GridLayout(2,1));

        panBig.add(txtMess)     ;

        panBig.add(panSmall);

           //布置窗体

        this.setLayout(new BorderLayout());

        this.add(panBig,BorderLayout.NORTH);

        this.add(SpCon,BorderLayout.CENTER);

        //

        try{

        File f=new File("d:/text/聊天记录/txt.txt");

        FileReader fr=new FileReader(f);

        BufferedReader br=new BufferedReader(fr);

        while(br.ready()){

              txtCon.append(br.readLine());

        }

        }catch(Exception e){}

      }

    //按钮事件5

      @Override

      public void actionPerformed(ActionEvent arg0) {

           // txtMess---------------->>txtCon

           txtCon.append(txtMess.getText()+"\n");

            //聊天记录6

           try{

                 File f=new File("d:/text/聊天记录.txt.txt");

                 FileWriter fw=new FileWriter(f,true);

                 PrintWriter pw=new PrintWriter(fw);

                 pw.println(txtMess.getText());

                 pw.close();

           }catch(Exception e){}

        txtCon.setText("");

      }

      //接收线程17

      @Override

      public void run() {

           try{

                 InputStream is=s.getInputStream();

                 InputStreamReader isr=new InputStreamReader(is);

                 BufferedReader br=new BufferedReader(isr);

                 while(true){

                      String message=br.readLine();

                 }

           }catch(Exception e){}

           // TODO Auto-generated method stub

      }

      //发送消息到服务器21

}

package www;

import java.awt.*;

import javax.swing.*;

import java.io.*;

import java.net.*;

import java.awt.event.*;

public class QQLogin extends JFrame implements ActionListener {

      //登录界面1

      JTextField txtUser=new JTextField();

      JPasswordField txtPass=new JPasswordField();

      public QQLogin(){

           //设置窗体属性

           this.setSize(250,125);

           this.setLocation(400,300);

           this.setTitle("QQ登录");

           //new一大堆组件

           JLabel labUser=new JLabel("用户名:");

           JLabel labPass=new JLabel("密码:");

           JButton btnLogin=new JButton("登录");

           JButton btnReg=new JButton("注册");

           JButton btnCancel=new JButton("取消");

           //注册事件

           btnLogin.addActionListener(this);

           btnReg.addActionListener(this);

           btnCancel.addActionListener(this);

           //布置输入面板

           JPanel panInput=new JPanel();

           panInput.setLayout(new GridLayout(2,2));

           panInput.add(labUser);

           panInput.add(txtUser);

           panInput.add(labPass);

           panInput.add(txtPass);

           //布置按钮面板

           JPanel panButton=new JPanel();

           panButton.setLayout(new FlowLayout());

           panButton.add(btnReg);

           panButton.add(btnCancel);

           //布置窗体

           this.setLayout(new BorderLayout());

           this.add(panInput,BorderLayout.CENTER);

           this.add(panButton,BorderLayout.SOUTH);

      }

      public static void main(String args[]){

           QQLogin w=new QQLogin();

           w.setVisible(true);

      }

      //按钮事件(3

      @Override

      public void actionPerformed(ActionEvent e) {

        if    (e.getActionCommand().equals("登录")){

        String user=txtUser.getText();

        String pass=txtPass.getText();

        try{

                  //发送用户名和密码到服务器10

                  Socket s=new Socket("127.0.0.1",8000);

                  OutputStream os=s.getOutputStream();                    OutputStreamWriter osw=new OutputStreamWriter(os);

                  PrintWriter pw=new PrintWriter(osw,true);

                  pw.println(user+"%"+pass);

                  System.out.println(user+" "+pass);

                  //接收服务器发送回来的确认信息13

                  InputStream is=s.getInputStream();

                  InputStreamReader isr=new InputStreamReader(is);

                  BufferedReader br=new BufferedReader(isr);

                  String yorn=br.readLine();

                  //显示主窗体4

                  if(yorn.equals("ok")){

                        QQmain w=new QQmain(user);

                        w.setSocket(s);

                        w.setVisible(true);

                        this.setVisible(false);

                  }

        }catch(Exception ee){}

             //显示主窗体4

        if(user.equals("aaa")&&pass.equals("111")){

              QQmain w=new QQmain(user);

        w.setVisible(true);

        this.setVisible(false);

        }

        }

        if(e.getActionCommand().equals("注册")){

        }

        if(e.getActionCommand().equals("取消")){

        }

      }

}

.实训接近尾声,这段时间我学到了很多,以后会继续学习编程,争取自己会设计。

1.23:

 1.package QQ;

import java.awt.*;

import javax.swing.*;

import java.io.*;

import java.net.*;

import java.awt.event.*;

public class QQMain extends JFrame implements ActionListener,Runnable,WindowListener{

      JTextField txtMess=new JTextField();

      JTextArea txtCon=new JTextArea();

      JComboBox cmbUser=new JComboBox();

      private Socket s;

      public void setSocket(Socket s){

           this.s=s;

           Thread t=new Thread(this);

           t.start();

      }

           //主窗体界面(2)

           public QQMain(String title){

                 //设置窗体属性

                 this.setSize(400,500);

                 this.setLocation(200, 200);

                 this.setTitle(title);

                 //new一大堆组

                 JButton btnSend=new JButton("发送");

                 JScrollPane spCon=new JScrollPane(txtCon);

                 //注册事件

                 btnSend.addActionListener(this);

                 this.addWindowListener(this);

                 //布置小面板

                 JPanel panSmall=new JPanel();

                 panSmall.setLayout(new GridLayout(1,2));

                 panSmall.add(cmbUser);

                 panSmall.add(btnSend);

                 //布置大面板

                 JPanel panBig=new JPanel();

                 panBig.setLayout(new GridLayout(2,1));

                 panBig.add(txtMess);

                 panBig.add(panSmall);

                 //布置窗体

                 this.setLayout(new BorderLayout());

                 this.add(panBig,BorderLayout.NORTH);

                 this.add(spCon,BorderLayout.CENTER);

                 //读聊天记录

                 try{

                      File f=new File("d:/test/聊天记录.txt");

                      FileReader fr=new FileReader(f);

                      BufferedReader br=new BufferedReader(fr);

                      while(br.ready()){

                            txtCon.append(br.readLine()+"\n");

                      }

                 }catch(Exception e){}

                 this.setVisible(true);

           }

           //public static void main(String args[]){}

        //按钮事件(5)

           @Override

           public void actionPerformed(ActionEvent e) {

                 // TODO Auto-generated method stub

                 //txtMess-------------->>txtCon

                 txtCon.append(txtMess.getText()+"\n");

           //聊天记录(6)

           try{

                 File f=new File("d:/yest/聊天记录.txt");

                 FileWriter fw=new FileWriter(f,true);

                 PrintWriter pw=new PrintWriter(fw);

                 pw.println(txtMess.getText());

                 pw.close();

           }catch(Exception ee){}

           //发送消息到服务器21

           try{

                 OutputStream os=s.getOutputStream();

                 OutputStreamWriter osw=new OutputStreamWriter(os);

                 PrintWriter pw=new PrintWriter(osw,true);

      pw.println(cmbUser.getSelectedItem()+"%"+txtMess.getText());

           }catch(Exception ee){

                 ee.printStackTrace();

           }

           txtMess.setText("");

}

           //接收线程(17)

           @Override

           public void run() {

                 // TODO Auto-generated method stub

                 try{

                      InputStream is=s.getInputStream();

                      InputStreamReader isr=new InputStreamReader(is);

                      BufferedReader br=new BufferedReader(isr);

                      while(true){

                            String message=br.readLine();

                            //System.out.println(message);

                          String to=message.split("%")[0];

                          String mess=message.split("%")[1];

                          if(to.equals("user")){

                             cmbUser.addItem(mess);

                          }

                          if(to.equals("mess")){

                             txtCon.append(mess+"\n");

                          }

                          if(to.equals("remove")){

                             cmbUser.removeItem(mess);

                          }

                      }

                 }catch(Exception e){}

           }

           @Override

           public void windowOpened(WindowEvent e) {

                 // TODO Auto-generated method stub 

           }

           @Override

           public void windowClosing(WindowEvent e) {

                 // TODO Auto-generated method stub

                 try{

                      //通知服务器,哥们要走了

                      OutputStream os=s.getOutputStream();

                      OutputStreamWriter osw=new OutputStreamWriter(os);

                      PrintWriter pw=new PrintWriter(osw,true);

                      pw.println("exit");

                 }catch(Exception ee){}

                 //哥们真走啦

                 System.exit(0);

           }

           @Override

           public void windowClosed(WindowEvent e) {

                 // TODO Auto-generated method stub

           }

           @Override

           public void windowIconified(WindowEvent e) {

                 // TODO Auto-generated method stub

            }

           @Override

           public void windowDeiconified(WindowEvent e) {

                 // TODO Auto-generated method stub 

           }

           @Override

           public void windowActivated(WindowEvent e) {

                 // TODO Auto-generated method stub

           }

           @Override

           public void windowDeactivated(WindowEvent e) {

                 // TODO Auto-generated method stub

           }

}

2.

package QQ;

import java.net.*;

import java.io.*;

import java.util.*;

public class QQServer {

      public static void main(String args[]){

           try{

           //创建HashMap,用于保存用户名和对应的Socket (15)

                 HashMap hm=new HashMap();

           //服务器到8000端口监听(7)

           ServerSocket ss=new ServerSocket(8000);

           while(true){

           System.out.println("Server startup in 1000ms......");

           Socket s=ss.accept();

           //启动服务线程(8)

           MyService t=new MyService();

           t.setSocket(s);

           t.setHashMap(hm);

           t.start();

           }

           }catch(Exception e){

           }

      }

}

class MyService extends Thread{

      private Socket s;

      private HashMap hm;

      public void setSocket(Socket s){

           this.s=s;

      }

      public void setHashMap(HashMap hm){

           this.hm=hm;

      }

      public void run(){

           try{

                 //接收用户名和密码(9)

                 InputStream is=s.getInputStream();

                 InputStreamReader isr=new InputStreamReader(is);

                 BufferedReader br=new BufferedReader(isr);

                 String uandp=br.readLine();

           //拆分(11)

                 String user=uandp.split("%")[0];

                 String pass=uandp.split("%")[1];

                 System.out.println(user+""+pass);

           //验证(12)

                 File f=new File("d:/test/user.txt");

                 FileReader fr=new FileReader(f);

                 BufferedReader fbr=new BufferedReader(fr);

                 boolean yorn=false;

                 while(fbr.ready()){

                      String users=fbr.readLine();

                      String uu=users.split("===")[0];

                      String pp=users.split("===")[1];

                      if(user.equals(uu)&&pass.equals(pp)){

                            yorn=true;

                            break;

                      }

                 }

           //发送确认信息回客户端(14)

                 OutputStream os=s.getOutputStream();

                 OutputStreamWriter osw=new OutputStreamWriter(os);

                 PrintWriter pw=new PrintWriter(osw,true);

                 if(yorn){

                      pw.println("ok");

           //将自己的名字发送给其他人(18)

                 for(Object temp:hm.values()){

                      Socket ts=(Socket)temp;

                      OutputStream tos=ts.getOutputStream();

                      OutputStreamWriter tosw=new OutputStreamWriter(tos);

                      PrintWriter tpw=new PrintWriter(tosw,true);

                      tpw.println("user%"+user);

                 }

           //将其他人的名字发送给自己(19)

                 for(Object temp:hm.keySet()){

                      pw.println("user%"+(String)temp);

                 }

           //将用户名和对应的Socket保存到HashMap(16)

                 hm.put(user,s);

                 System.out.println(hm);

           //不断的接收信息,并转发(20)

                 while(true){

                      String message=br.readLine();

                      if(message.equals("exit")){

                            //通知所有的人,这家伙要走了

                            for(Object temp:hm.values()){

                                  Socket ts=(Socket)temp;

                                  OutputStream tos=ts.getOutputStream();

                            OutputStreamWriter tosw=new OutputStreamWriter(tos);

                                  PrintWriter tpw=new PrintWriter(tosw,true);

                            tpw.println("remove%"+user);

                            }

                            //HashMap中删除

                            hm.remove(user);

                            //结束程序

                            return;

                      }

                      //System.out.println(message);

                      String to=message.split("%")[0];

                      String mess=message.split("%")[1];

                      Object temp=hm.get(to);

                      Socket ts=(Socket)temp;

                      OutputStream tos=ts.getOutputStream();

                        OutputStreamWriter tosw=new OutputStreamWriter(tos);

                      PrintWriter tpw=new PrintWriter(tosw,true);

                     

                      tpw.println("mess%"+mess);

                 }

           }else{

                 pw.println("err");

                 }

           }catch(Exception e){

           }

      }

}   

3.

package QQ;

import java.io.*;

import java.awt.*;

import java.awt.event.*;

import java.net.*;

import javax.swing.*;

public class QQLogin extends JFrame implements ActionListener{

      JTextField txtUser=new JTextField();

      JPasswordField txtPass=new JPasswordField();

      //登录界面(1)

      public QQLogin(){

           //设置窗体属性

           this.setSize(250, 125);

           this.setLocation(400, 300);

           this.setTitle("QQ登录");

           //new一大堆组件

           JLabel labUser=new JLabel("用户名:");

           JLabel labPass=new JLabel("密码:");

           JButton btnLogin=new JButton("登录");

           JButton btnReg=new JButton("注册");

           JButton btnCancel=new JButton("取消");

           //注册事件

           btnLogin.addActionListener(this);

           btnReg.addActionListener(this);

           btnCancel.addActionListener(this);

           //布置输入面板

           JPanel panInput=new JPanel();

           panInput.setLayout(new GridLayout(2,2));

           panInput.add(labUser);

           panInput.add(txtUser);

           panInput.add(labPass);

           panInput.add(txtPass);

           //布置按钮面板

           JPanel panButton=new JPanel();

           panButton.setLayout(new FlowLayout());

           panButton.add(btnLogin);

           panButton.add(btnReg);

           panButton.add(btnCancel);

           //布置窗体

           this.setLayout(new BorderLayout());

           this.add(panInput,BorderLayout.CENTER);

           this.add(panButton,BorderLayout.SOUTH);

      }

      public static void main(String args[]){

           QQLogin w=new QQLogin();

           w.setVisible(true);

      }

      //按钮事件(3)

      @Override

      public void actionPerformed(ActionEvent e) {

           // TODO Auto-generated method stub

           if(e.getActionCommand().equals("登录")){

                 String user=txtUser.getText();

                 String pass=txtPass.getText();

                 try{

                 //发送用户名和密码到服务器(10)

                      Socket s=new Socket("127.0.0.1",8000);

                      OutputStream os=s.getOutputStream();

                  OutputStreamWriter osw=new OutputStreamWriter(os);

                      PrintWriter pw=new PrintWriter(osw,true);

                     

                      pw.println(user+"%"+pass);

               //接收服务器发送回来的确认信息(13)

                      InputStream is=s.getInputStream();

                      InputStreamReader isr=new InputStreamReader(is);

                      BufferedReader br=new BufferedReader(isr);

                      String yorn=br.readLine();

                 //显示主窗体(4)

                 if(yorn.equals("ok")){

                      QQMain w=new QQMain(user);

                      w.setVisible(true);

                      this.setVisible(false);

                 }

           }catch(Exception ee){}

           if(e.getActionCommand().equals("注册")){

           }

           if(e.getActionCommand().equals("取消")){

           }

      }

}

}   

二.   实训心得体会

14天的实训在充实与忙碌中度过了,上大学以来这14天让我很难忘。第一节课,本对这次实训不抱太大期望的我被王洋老师的幽默风趣让我改变了看法。简单易懂,由浅入深,思路紧密的授课方式也让认识到以前学习java的方法有问题。以前的我总是只知道看书,看其中的程序,但很少自己动手去打程序。当我自己敲了程序后才发现只有去实践才能找到自己的错误和不懂的地方。王洋老师说的很对,一个程序敲多了自然会明白程序的意思与思路。我还懂得了编程思路的重要性,必须要有严谨的态度。还有细节决定成败。
    14天的实训,真的感谢学院为我们做的一切,感谢王洋老师的教学,他是一位伟大的老师,用人格魅力感染了我们,让我们对学习java有了动力。还有其他几位陪在我们身边的老师们,在我们有疑惑时他们会及时出现在我们面前提供帮助。感谢这一切,让我的大学变得与众不同,我也会努力,丰富自己的知识。

相关推荐