zoukankan      html  css  js  c++  java
  • 聊天项目

      在马士兵的聊天项目中,有很多细节我们需要了解清楚,编程最重要的是思想,在学习过程中一定要知道步骤:

    1,建立一个窗口。用Frame类里的方法建立。程序如下:

    import java.awt.*;
    
    public class ChatClient extends Frame {
        
    
        public static void main(String[] args) {
            
                new ChatClient().launchFrame();
    
        
        }
        public void launchFrame(){
            setLocation(400,300);
            this.setSize(300, 300);
            setVisible(true);
        }
    
    }
        

    2,、建立窗口体,使用

    TextField tfTxt=new TextField();
    TextArea ta=new TextArea();

    建立对象。再添加对象位置。程序如下:

    import java.awt.*;
    
    public class ChatClient extends Frame {
        
        TextField tfTxt=new TextField();
        TextArea ta=new TextArea();
    
        public static void main(String[] args) {
            
                new ChatClient().launchFrame();
    
            
        }
        public void launchFrame(){
            setLocation(400,300);
            this.setSize(300, 300);
            add(tfTxt,BorderLayout.SOUTH);
            add(ta,BorderLayout.NORTH);
            pack();
            setVisible(true);
        }
    
    }
        

     3,添加事件处理,使用事件处理来使窗口可以退出,对于其中的方法要了解并且会使用,会用每一个方法是最关键的。程序如下:

    import java.awt.*;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.util.*;
    
    public class ChatClient extends Frame {
        
        TextField tfTxt=new TextField();
        TextArea ta=new TextArea();
    
        public static void main(String[] args) {
            
        new ChatClient().launchFrame();
    
            
        }
        public void launchFrame(){
            setLocation(400,300);
            this.setSize(300, 300);
            add(tfTxt,BorderLayout.SOUTH);
            add(ta,BorderLayout.NORTH);
            pack();
            this.addWindowListener(new WindowAdapter() {//addWindowListener添加指定的窗口焦点侦听器,以从此窗口接收窗口事件
                @Override
                public void windowClosing(WindowEvent arg0) {//windowClosing窗口正处在关闭过程中时调用,
                    
                
                    System.exit(0);
                }
    
                
            });
            setVisible(true);
        }
    
    }

    4,实现聊天打字按回车能够消失输入框里的内容,用这个getText()和setTest()方法实现。程序如下:

    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.util.*;
    
    public class ChatClient extends Frame {
        
        TextField tfTxt=new TextField();
        TextArea ta=new TextArea();
    
        public static void main(String[] args) {
            
        new ChatClient().launchFrame();
    
            
        }
        public void launchFrame(){
            setLocation(400,300);
            this.setSize(300, 300);
            add(tfTxt,BorderLayout.SOUTH);
            add(ta,BorderLayout.NORTH);
            pack();
            this.addWindowListener(new WindowAdapter() {//addWindowListener添加指定的窗口焦点侦听器,以从此窗口接收窗口事件
                @Override
                public void windowClosing(WindowEvent arg0) {//windowClosing窗口正处在关闭过程中时调用,
                    
                
                    System.exit(0);
                }
    
                
            });
            tfTxt.addActionListener(new TFListtener());
            //public void addActionListener(ActionListener l)
            //添加指定的操作侦听器,以从此文本字段接收操作事件。如果 l 为 null,则不抛出任何异常,也不执行任何操作。 
            setVisible(true);
        }
        
        private class TFListtener implements ActionListener{
            
            
    
            @Override
            public void actionPerformed(ActionEvent e) {
                
                String s=tfTxt.getText().trim();//getText()返回此文本组件表示的文本。默认情况下,此文本是一个空字符串。
                ta.setText(s);//将此文本组件显示的文本设置为指定文本
                tfTxt.setText("");
                
            }
            
        }
    
    }

    5.实现客户端的连接,首先建立客户端,引入java.net.*;包。具体程序如下:

    import java.io.IOException;
    import java.net.*;
    
    public class ChatServer {
    
        public static void main(String[] args) {
            
            try {
                ServerSocket ss=new ServerSocket(8888);//创建绑定到特定端口的服务器套接字
                while(true){
                    Socket s=ss.accept();//侦听并接受到此套接字的连接。
                    System.out.println("a client connercted ");
                }
            } catch (IOException e) {
                
                e.printStackTrace();
            }
    
        }
    
    }

    6,建立服务器端与客户端的连接,具体程序如下:

    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.IOException;
    import java.util.*;
    import java.net.*;
    
    public class ChatClient extends Frame {
        
        TextField tfTxt=new TextField();
        TextArea ta=new TextArea();
    
        public static void main(String[] args) {
            
        new ChatClient().launchFrame();
        
        }
        public void launchFrame(){
            setLocation(400,300);
            this.setSize(300, 300);
            add(tfTxt,BorderLayout.SOUTH);
            add(ta,BorderLayout.NORTH);
            pack();
            this.addWindowListener(new WindowAdapter() {//addWindowListener添加指定的窗口焦点侦听器,以从此窗口接收窗口事件
                @Override
                public void windowClosing(WindowEvent arg0) {//windowClosing窗口正处在关闭过程中时调用,
                    
                
                    System.exit(0);
                }
    
                
            });
            tfTxt.addActionListener(new TFListtener());
            //public void addActionListener(ActionListener l)
            //添加指定的操作侦听器,以从此文本字段接收操作事件。如果 l 为 null,则不抛出任何异常,也不执行任何操作。 
            setVisible(true);
            connect();
        }
        
        public void connect(){
            try {
                //public Socket(InetAddress address,
                //int port)
                //throws IOException创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
                Socket s=new Socket("127.0.0.1",8888);
                System.out.println("connected");
            } catch (UnknownHostException e) {
                
                e.printStackTrace();
            } catch (IOException e) {
                
                e.printStackTrace();
            }
        }
        
        private class TFListtener implements ActionListener{
            
            
    
            @Override
            public void actionPerformed(ActionEvent e) {
                
                String s=tfTxt.getText().trim();//getText()返回此文本组件表示的文本。默认情况下,此文本是一个空字符串。
                ta.setText(s);//将此文本组件显示的文本设置为指定文本
                tfTxt.setText("");
                
            }
            
        }
    
    }

    7.在客户端输入,在服务器端也能接收到信息。具体程序如下:

    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.util.*;
    import java.net.*;
    
    
    public class ChatClient extends Frame {
        
        Socket s=null;
        
        TextField tfTxt=new TextField();
        TextArea ta=new TextArea();
    
        public static void main(String[] args) {
            
        new ChatClient().launchFrame();
        
        }
        public void launchFrame(){
            setLocation(400,300);
            this.setSize(300, 300);
            add(tfTxt,BorderLayout.SOUTH);
            add(ta,BorderLayout.NORTH);
            pack();
            this.addWindowListener(new WindowAdapter() {
                //addWindowListener添加指定的窗口焦点侦听器,以从此窗口接收窗口事件
                @Override
                public void windowClosing(WindowEvent arg0) {//windowClosing窗口正处在关闭过程中时调用,
                    
                
                    System.exit(0);
                }
    
                
            });
            tfTxt.addActionListener(new TFListtener());
            //public void addActionListener(ActionListener l)
            //添加指定的操作侦听器,以从此文本字段接收操作事件。如果 l 为 null,则不抛出任何异常,也不执行任何操作。 
            setVisible(true);
            connect();
        }
        
        public void connect(){
            try {
                //public Socket(InetAddress address,
                //int port)
                //throws IOException创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
                s=new Socket("127.0.0.1",8888);
                System.out.println("connected");
            } catch (UnknownHostException e) {
                
                e.printStackTrace();
            } catch (IOException e) {
                
                e.printStackTrace();
            }
        }
        
        private class TFListtener implements ActionListener{
            
            
    
            @Override
            public void actionPerformed(ActionEvent e) {
                
                String str=tfTxt.getText().trim();//getText()返回此文本组件表示的文本。默认情况下,此文本是一个空字符串。
                ta.setText(str);//将此文本组件显示的文本设置为指定文本
                tfTxt.setText("");
                try {
                    System.out.println(s);
                    DataOutputStream   dos=new DataOutputStream(s.getOutputStream());
                    dos.writeUTF(str);
                    dos.flush();
                    dos.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
                
            }
            
        }
    
    }
    import java.io.DataInputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream.GetField;
    import java.net.*;
    
    @SuppressWarnings("unused")
    public class ChatServer {
    
        public static void main(String[] args) {
            
            try {
                ServerSocket ss=new ServerSocket(8888);//创建绑定到特定端口的服务器套接字
                while(true){
                    Socket s=ss.accept();//侦听并接受到此套接字的连接。
                    System.out.println("a client connercted ");
                    DataInputStream dis=new DataInputStream(s.getInputStream());
                    String str=dis.readUTF();
                    System.out.println(str);
                    dis.close();
                }
            } catch (IOException e) {
                
                e.printStackTrace();
            }
    
        }
    
    }

    8,、建立服务器端与客服端的连接,并且可以连续输入内容和接收内容,程序如下:

    import java.io.DataInputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream.GetField;
    import java.net.*;
    
    @SuppressWarnings("unused")
    public class ChatServer {
        
    
        public static void main(String[] args) {
            boolean started =false;
            try {
                ServerSocket ss=new ServerSocket(8888);//创建绑定到特定端口的服务器套接字
                started=true;
                while(started){
                    boolean bConnected=false;
                    Socket s=ss.accept();//侦听并接受到此套接字的连接。
                    System.out.println("a client connercted ");
                    bConnected=true;
                    DataInputStream dis=new DataInputStream(s.getInputStream());
                    while(bConnected){
                        String str=dis.readUTF();
                        System.out.println(str);
                    }
                     dis.close();
                }
            } catch (IOException e) {
                
                e.printStackTrace(); 
            }
    
        }
    
    }
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.util.*;
    import java.net.*;
    
    
    public class ChatClient extends Frame {
        
        Socket s=null;
        DataOutputStream dos=null;
        
        TextField tfTxt=new TextField();
        TextArea ta=new TextArea();
    
        public static void main(String[] args) {
            
        new ChatClient().launchFrame();
        
        }
        public void launchFrame(){
            setLocation(400,300);
            this.setSize(300, 300);
            add(tfTxt,BorderLayout.SOUTH);
            add(ta,BorderLayout.NORTH);
            pack();
            this.addWindowListener(new WindowAdapter() {
                //addWindowListener添加指定的窗口焦点侦听器,以从此窗口接收窗口事件
                @Override
                public void windowClosing(WindowEvent arg0) {//windowClosing窗口正处在关闭过程中时调用,
                    
                    disconnect();   
                    System.exit(0);
                }
    
                
            });
            tfTxt.addActionListener(new TFListtener());
            //public void addActionListener(ActionListener l)
            //添加指定的操作侦听器,以从此文本字段接收操作事件。如果 l 为 null,则不抛出任何异常,也不执行任何操作。 
            setVisible(true);
            connect();
        }
        
        public void connect(){
            try {
                //public Socket(InetAddress address,
                //int port)
                //throws IOException创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
                s=new Socket("127.0.0.1",8888);
                dos=new DataOutputStream(s.getOutputStream());
                System.out.println("connected");
            } catch (UnknownHostException e) {
                
                e.printStackTrace();
            } catch (IOException e) {
                
                e.printStackTrace();
            }
        } 
        
        public void disconnect(){
            try {
                dos.close();
                s.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
             
        }
        
        private class TFListtener implements ActionListener{
            
            
    
            @Override
            public void actionPerformed(ActionEvent e) {
                
                String str=tfTxt.getText().trim();//getText()返回此文本组件表示的文本。默认情况下,此文本是一个空字符串。
                ta.setText(str);//将此文本组件显示的文本设置为指定文本
                tfTxt.setText("");
                try {
                    System.out.println(s);
                    //DataOutputStream   dos=new DataOutputStream(s.getOutputStream());
                    dos.writeUTF(str);
                    dos.flush();
                    //dos.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
                
            }
            
        }
    
    }
  • 相关阅读:
    【Delphi】MD5算法(二):应用
    迅雷不能下载FlashPlayer,下载后自动删除,狂汗!!!
    工作笔记1
    GridControl 获取筛选后的数据{笔记}
    Invoke与BeginInvoke[转]
    这几项能力不知道要几年
    你永远不要去做的事1【译】
    window环境变量——心得【转】
    刚做好的网站客服系统,欢迎大家测试
    .Net 2.0里有一个有用的新功能:迭代器
  • 原文地址:https://www.cnblogs.com/tangdeqiang/p/7605469.html
Copyright © 2011-2022 走看看