JAVA 聊天程序(客户端)

客户端代码:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
public class speak extends JFrame implements Runnable{
    JPanel pan=null;
    JLabel jl=null;
    JLabel jl1=null;
    Font f=new Font("微软雅黑",Font.BOLD,15);
    JTextArea textarea=null;
    JTextArea textarea1=null;
    JScrollPane span=null;
    JScrollPane span1=null;
    JButton b1,b2,b3,b4;
    JLabel l1,l2,l3;
    JTextField jt1;
    JLabel jt2,jt3;
    boolean stat,runstat=false;
    ServerSocket  server;
    Socket sock,sock1;
    Thread thread,thread1;
    PrintWriter out;
    BufferedReader in=null;
    InetAddress address=null;
    speak(){
        setSize(480,380);
        setTitle("聊天啦!");
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
            SwingUtilities.updateComponentTreeUI(this);
         }catch(Exception   e)   {
         }
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Dimension d=Toolkit.getDefaultToolkit().getScreenSize();
        setLocation((d.width-getSize().width)/2,
                (d.height-getSize().height)/2);
        setContentPane(getpan());
        setResizable(false);
        setVisible(true);
    }
    public final JPanel getpan(){
        if(pan==null){
            pan=new JPanel();
            pan.setLayout(null);
            jl=new JLabel("聊天记录>>>");
            jl.setBounds(20,0,140,20);
            jl.setFont(f);
            pan.add(jl);
            jl1=new JLabel("发送消息>>>");
            jl1.setBounds(20,220,140,20);
            jl1.setFont(f);
            pan.add(jl1);
            l1=new JLabel("IP地址:");
            l1.setBounds(360,10,120,20);
            l1.setFont(f);
            pan.add(l1);
            l2=new JLabel("连接状态:");
            l2.setBounds(360,175,120,20);
            l2.setFont(f);
            pan.add(l2);
            l3=new JLabel("本机IP地址:");
            l3.setBounds(360,135,120,20);
            l3.setFont(f);
            pan.add(l3);
            pan.add(getarea());
            pan.add(getspan());
            pan.add(getarea1());
            pan.add(getspan1());
            pan.add(getb1());
            pan.add(getb2());
            pan.add(getb3());
            pan.add(getb4());
            pan.add(getjt1());
            pan.add(getjt2());
            pan.add(getjt3());
        }
        return pan;
    }
    public JButton getb1(){
        if(b1==null){
            b1=new JButton("开始连接");
            b1.setFont(f);
            b1.setBounds(360,60,100,30);
            b1.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e) {                    
                    if(runstat){
                        Toolkit.getDefaultToolkit().beep();
                        JOptionPane.showMessageDialog(pan,"请先断开连接",
                             "警告!",JOptionPane.ERROR_MESSAGE);
                    }
                    else{
                        serverListen();
                        startConnect();
                    }
                }
            });
        }
        return b1;
    }
    public void serverListen(){
         try{
            server = new ServerSocket(30000,5);
            sock1=server.accept();
            in=new BufferedReader(new InputStreamReader(sock1.getInputStream()));
            out=new PrintWriter(sock1.getOutputStream());
            runstat=true;
            jt3.setText("连接成功!");
         }
         catch(Exception exception){
                 jt3.setText("连接失败!");
             }
              thread1=new Thread(this);
              thread1.start();
        }

    public void startConnect(){
        try{
            sock=new Socket(jt1.getText(),30000);
            jt3.setText("连接成功!");
            setTitle("与["+jt1.getText()+"]聊天中>>>");
            textarea.append("\n");
       //     textarea.setForeground(Color.green);
            textarea.append("连接成功!");
            textarea.setSelectionStart(textarea.getText().length());
            runstat=true;
            in=new BufferedReader(new InputStreamReader(sock.getInputStream()));
            out=new PrintWriter(sock.getOutputStream());
        }
        catch(Exception e){
            jt3.setText("连接失败!");
            textarea.append("\n");
            textarea.append("连接失败!");
            textarea.setSelectionStart(textarea.getText().length());
            runstat=false;
            repaint();
        }
        thread=new Thread(this);
        thread.start();
    }
    public JButton getb2(){
        if(b2==null){
            b2=new JButton("断开连接");
            b2.setFont(f);
            b2.setBounds(360,95,100,30);
            b2.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e) {
                    if(runstat==false){
                       Toolkit.getDefaultToolkit().beep();
                       JOptionPane.showMessageDialog(pan,"未连接!",
                            "警告!",JOptionPane.ERROR_MESSAGE);
                     }
                    else{
                        try{
                            out.println("断开连接!");
                            out.flush();
                            textarea.append("\n");
                            textarea.append("断开连接!");
                            textarea.setSelectionStart(textarea.getText().length());
                            jt3.setText("断开连接!");
                            stoprun();
                        }
                        catch(Exception e1){
                            jt3.setText("连接失败!");
                            textarea.append("\n");
                            textarea.append("连接失败!");
                            textarea.setSelectionStart(textarea.getText().length());
                        }
                    }
                }               
            });
        }
        return b2;
    }
    public JButton getb3(){
        if(b3==null){
            b3=new JButton("发送");
            b3.setFont(f);
            b3.setBounds(370,250,80,30);
            b3.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e) {
                    if(textarea1.getText().equals("")){
                        Toolkit.getDefaultToolkit().beep();
                        JOptionPane.showMessageDialog(pan,"输入内容为空!",
                           "警告!",JOptionPane.ERROR_MESSAGE);
                    }
                    else if(runstat==true){
                        sendmsg();
                        textarea1.setText("");
                    }
                    else{
                        Toolkit.getDefaultToolkit().beep();
                        JOptionPane.showMessageDialog(pan,"未连接!",
                                "警告!",JOptionPane.ERROR_MESSAGE);
                    }
                }                
            });
        }
        return b3;
    }
    public JButton getb4(){
        if(b4==null){
            b4=new JButton("取消");
            b4.setFont(f);
            b4.setBounds(370,290,80,30);
            b4.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e) {
                    Toolkit.getDefaultToolkit().beep();
                    int i=JOptionPane.showConfirmDialog(pan,"退出程序",
                            "消息",JOptionPane.OK_CANCEL_OPTION);
                    if(i==0){
                        System.exit(0);
                    }                  
                }
            });
        }
        return b4;
    }
    public JTextField getjt1(){
        if(jt1==null){
            jt1=new JTextField("117.132.65.154");
            jt1.setBounds(360,30,100,20);
        }
        return jt1;
    }
    public JLabel getjt2(){
        if(jt2==null){
            jt2=new JLabel();
            jt2.setBounds(360,155,100,20);
            try {
                address=InetAddress.getLocalHost();
                jt2.setText(address.getHostAddress());
            } 
            catch (UnknownHostException ex) {}
        }
        return jt2;
    }
    public JLabel getjt3(){
        if(jt3==null){
            jt3=new JLabel("准备就绪");
            jt3.setFont(new Font("微软雅黑",Font.PLAIN,14));
            jt3.setBounds(360,195,100,20);
        }
        return jt3;
    }
    public JTextArea getarea(){
        if(textarea==null){
            textarea=new JTextArea();
            textarea.setFont(new Font("微软雅黑",Font.PLAIN,14));
        }
        return textarea;
    }
    public JTextArea getarea1(){
        if(textarea1==null){
            textarea1=new JTextArea();
            textarea1.setFont(new Font("微软雅黑",Font.PLAIN,14));
            textarea1.addKeyListener(new KeyListener(){
                public void keyTyped(KeyEvent e) {}
                public void keyPressed(KeyEvent e) {
                    if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER){
                        if(textarea1.getText().equals("")){
                        Toolkit.getDefaultToolkit().beep();
                        JOptionPane.showMessageDialog(pan,"输入内容为空!",
                           "警告!",JOptionPane.ERROR_MESSAGE);
                    }
                    else if(runstat==true){
                        sendmsg();
                        textarea1.setText("");
                    }
                    else{
                        Toolkit.getDefaultToolkit().beep();
                        JOptionPane.showMessageDialog(pan,"未连接!",
                            "警告!",JOptionPane.ERROR_MESSAGE);
                    }
                    }
                }
                public void keyReleased(KeyEvent e) {}
            });
        }
        return textarea1;
    }
    public JScrollPane getspan(){
        if(span==null){
            span=new JScrollPane(getarea());
            span.setBounds(10,20,340,200);
        }
        return span;
    }
    public JScrollPane getspan1(){
        if(span1==null){
            span1=new JScrollPane(getarea1());
            span1.setBounds(10,240,340,100);
        }
        return span1;
    }
    public void stoprun(){
        stat=false;
        runstat=false;
        }
    public void sendmsg(){
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String str =(df.format(new Date()));
        out.println(textarea1.getText());
        try {
            address = InetAddress.getLocalHost();
        } catch (UnknownHostException ex) {}
        textarea.setForeground(Color.green);
        writemsg("<"+address.getHostName()+
                ">    "+str+"\n"+textarea1.getText());
  //      textarea.setForeground(Color.BLACK);
        out.flush();
    }
    
    public void writemsg(String msg){
        textarea.append("\n");
        textarea.append(msg);
        textarea.setSelectionStart(textarea.getText().length());
        }
    public static void main(String[] args) {
        speak speak = new speak();
    }
    public void run() {
        stat=true;
        String msg;
        while(stat){
            try {
                msg = in.readLine();
                if(msg.equals("连接失败!")||msg.equals("断开连接!")){
                   writemsg(msg);
                   stoprun();
                }
                else if(msg!=null){
                   DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                   String str=(df.format(new Date()));
                   Toolkit.getDefaultToolkit().beep();
                   writemsg("<"+jt1.getText()+">    "+str+"\n"+msg);
                }
                }
            catch (IOException ex){}
        }
            try{
                jt3.setText("断开连接!");
                textarea.append("\n");
                textarea.append("断开连接!");
                textarea.setSelectionStart(textarea.getText().length());
                sock.close();
                server.close();
                in.close();
                out.close();
                sock=null;
                server=null;
                runstat=false;     
                }
                catch(IOException ie){}
        
    }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值