Java简单聊天程序

硬盘挂掉,只剩下客户端代码......

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

class ChatClientFrame extends JFrame{
 static String num = "";
 static String nickname = "";
 static String password = "";
 static String ID = "";
 JPanel panel1 = new JPanel(new GridLayout(2,2));
 JPanel panel2 = new JPanel();
 JTextField text = new JTextField(15);
 JPasswordField passwordField = new JPasswordField(15);
 JLabel label1 = new JLabel("请输入帐号");
 JLabel label2 = new JLabel("请输入密码");
 JButton button1 = new JButton("登录");
 JButton button2 = new JButton("注册");
 final Connect con = new Connect();
 
 public ChatClientFrame(){
  setTitle("登录");
  setSize(200,125);
  setLocation(500,400);
  panel1.add(label1);
  panel1.add(text);
  panel1.add(label2);
  panel1.add(passwordField);
  panel2.add(button1);
  panel2.add(button2);
  button2.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e){
    Register frame = new Register();
    frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
          frame.setResizable(false);
          frame.setVisible(true);
   }
  });
  button1.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e){
    num = text.getText();
       password = new String(passwordField.getPassword());
       if(num.equals("")||password.equals("")){
       JOptionPane.showMessageDialog(null,"请输入完整的登录信息!","信息",JOptionPane.INFORMATION_MESSAGE);
   }
   else{
    String serverInfo = con.loggin(num,password);
    if(serverInfo.equals("OK")){
     ID=num;
     dispose();
     System.out.println("loggin successed");
     ClientFrame clientFrame = new ClientFrame();
     clientFrame.setVisible(true);
     clientFrame.setResizable(false);
     clientFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    else if(serverInfo.equals("ERROR")){
     JOptionPane.showMessageDialog(null,"用户名或密码错误!","错误",JOptionPane.INFORMATION_MESSAGE);
    }
   }
   }
  });
  add(panel1,BorderLayout.NORTH);
  add(panel2,BorderLayout.SOUTH);
 }
 
    class Register extends JFrame{
 //   final Connect con = new Connect();
 JPanel panel1 = new JPanel(new GridLayout(4,2));
 JPanel panel2 = new JPanel();
 JTextField text1 = new JTextField(15);
 JTextField text2 = new JTextField(15);
 JPasswordField password1 = new JPasswordField(15);
 JPasswordField password2 = new JPasswordField(15);
 JLabel label1 = new JLabel("请输入帐号");
 JLabel label4 = new JLabel("请输入昵称");
 JLabel label2 = new JLabel("请输入密码");
 JLabel label3 = new JLabel("确认密码");
 JButton button1 = new JButton("注册");
 JButton button2 = new JButton("取消");
 public Register(){
  setTitle("注册");
  setSize(250,150);
  setLocation(475,400);
  panel1.add(label1);
  panel1.add(text1);
  panel1.add(label4);
  panel1.add(text2);
  panel1.add(label2);
  panel1.add(password1);
  panel1.add(label3);
  panel1.add(password2);
  panel2.add(button1);
  panel2.add(button2);
  button1.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e){
    String s1 = new String(password1.getPassword());
    String s2 = new String(password2.getPassword());
    if(text1.getText().equals("")||text1.getText().equals("")||s1.equals("")){
     JOptionPane.showMessageDialog(null,"请输入完整的注册信息!","信息",JOptionPane.INFORMATION_MESSAGE);
    }
    else if(!(s1.equals(s2))){
     JOptionPane.showMessageDialog(null,"密码不匹配,请重新输入!","错误",JOptionPane.ERROR_MESSAGE);
    }
    else{
     num = text1.getText();
     nickname = text2.getText();
     password = s1;
     String serverInfo = con.register(num,nickname,password);
     if(serverInfo.equals("OK")){
      JOptionPane.showMessageDialog(null,"注册成功!","信息",JOptionPane.INFORMATION_MESSAGE);
      dispose();
     }
     else if(serverInfo.equals("ID_error")){
      JOptionPane.showMessageDialog(null,"该用户名已被注册,请选择其他用户名!","信息",JOptionPane.INFORMATION_MESSAGE);
     }
     System.out.println(num+nickname+password);
    }
   }
  });
  button2.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e){
    dispose();
   }
  });
  add(panel1,BorderLayout.CENTER);
  add(panel2,BorderLayout.SOUTH);
 }
    }
 
 class ClientFrame extends JFrame{
 JList friendList;
 JLabel label = new JLabel("好友列表");
    JPanel panel1 = new JPanel(new BorderLayout());
 JPanel panel2 = new JPanel(new GridLayout(2,2));
 JButton button1 = new JButton("添加好友");
 JButton button2 = new JButton("删除好友");
 JButton button3 = new JButton("与他聊天");
 String remoteIP ="";
 int localChatPort = 8001;
 boolean isChatting = false;
/* public Loggin(String num,String password){
  new Client().connect(num,password);
  
 }
 */
 public ClientFrame(){
  DefaultListModel model = new DefaultListModel();
  setTitle("HH 2008");
  setSize(200,400);
  friendList = new JList(model);
  friendList.setFixedCellHeight(35);
  friendList.setFixedCellWidth(15);
  panel1.add(label,BorderLayout.NORTH);
  panel1.add(friendList,BorderLayout.CENTER);
  panel2.add(button1);
  panel2.add(button2);
  panel2.add(button3);
  button1.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e){
    String friendID = JOptionPane.showInputDialog("请输入好友号码");
    if(friendID!=null)
    con.addFriend(friendID);
   }
  });
  button3.addActionListener(new ChatAction());
  add(panel1,BorderLayout.CENTER);
  add(panel2,BorderLayout.SOUTH);
  Thread t = new Thread(new ReceiveThread(localChatPort));
  t.start(); 
 }
 
 class ChatAction extends AbstractAction {
  public void actionPerformed(ActionEvent e){
   System.out.println("chat  "+remoteIP);
    remoteIP = con.chat("13131");
    System.out.println("chat  "+remoteIP);
    if(remoteIP.equals("friend_off_line")){
     JOptionPane.showMessageDialog(null,"该好友目前不在线,不能收到您的消息!","信息",JOptionPane.INFORMATION_MESSAGE);
    }
    else if(remoteIP.equals("ERROR")){
     JOptionPane.showMessageDialog(null,"发生IO错误!","信息",JOptionPane.INFORMATION_MESSAGE);
    }
    else{
     Thread t = new Thread(new ChatThread(remoteIP));
        t.start();
        isChatting = true;
    } 
   }
 }
 
 class ReceiveThread implements Runnable{
  private int port;
  private DatagramSocket socket;
  public ReceiveThread(int port){
   this.port = port;
   try{
    socket = new DatagramSocket(port);
   }catch(IOException e){
    e.printStackTrace();
   }
  }
  
  public void run(){
   while(true){
    try{
     DatagramPacket inPacket = new DatagramPacket(new byte[512],512);
     socket.receive(inPacket);
     String msg = new String(inPacket.getData(),0,inPacket.getLength());
     if(isChatting){
     }
     else{
      JOptionPane.showMessageDialog(null,"您收到新的的消息!/n"+msg,"信息",JOptionPane.INFORMATION_MESSAGE);
      
     } 
    }catch(IOException e){
     e.printStackTrace();
    }
   }
  }
 }
 
 class ChatThread implements Runnable{
  String ip = null;
  public ChatThread(String ip){
   this.ip=ip;
  }
  public void run(){
   ChatFrame chat= new ChatFrame();
   chat.setVisible(true);
   chat.pack();
  }
 }
 
 class ChatFrame extends JFrame{
  JTextArea message= new JTextArea(15,35);
     JTextArea sendArea = new JTextArea(10,15);
     JMenuBar menubar = new JMenuBar();
     JMenu operMenu = new JMenu("开始");
     JPanel panel = new JPanel();
     JButton sendButton = new JButton("发送");
     JMenuItem connectItem = new JMenuItem("连接");
     JMenuItem disConnectItem = new JMenuItem("断开连接");
     
  public ChatFrame(){
  setTitle("Chatting");
  
  operMenu.add(connectItem);
  operMenu.add(disConnectItem);
  menubar.add(operMenu);
  setJMenuBar(menubar);
  message.setLineWrap(true);
  sendArea.setLineWrap(true);
  panel.setLayout(new FlowLayout(FlowLayout.RIGHT));
  panel.add(sendButton);
  add(new JScrollPane(message),BorderLayout.NORTH);
  add(new JScrollPane(sendArea),BorderLayout.CENTER);
  add(panel,BorderLayout.SOUTH);
  Thread t = new Thread(new SendThread(remoteIP));
  t.start();
  
 /* connectItem.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e){
    ConnectFrame connectFrame = new ConnectFrame();
    connectFrame.setSize(200,110);
    connectFrame.setVisible(true);
    connectFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
   }
  });*/
  }
  
  public void setSendArea(String msg){
   sendArea.append(msg);
  }
  
  class SendThread implements Runnable,ActionListener{
   private InetAddress remoteIP;
   private int remotePort = 8001;
   private DatagramSocket socket;
   
   public SendThread(String remoteIP){
   // this.remotePort = remotePort;
    try{
     this.remoteIP = InetAddress.getByName(remoteIP);
     socket = new DatagramSocket();
    }catch(IOException e){
     e.printStackTrace();
    }
   }
   
   public void run(){
    sendButton.addActionListener(this);
   }
   public void actionPerformed(ActionEvent e){
    try{
     BufferedReader localReader = new BufferedReader(new StringReader(sendArea.getText()));
        String msg = null;
        while((msg = localReader.readLine())!=null){
     byte[] output = msg.getBytes();
     DatagramPacket outPacket = new DatagramPacket(output,output.length,remoteIP,remotePort);
     socket.send(outPacket);
    }
    }
    catch(IOException ex){
     ex.printStackTrace();
    }
   }
  } 
 }
 
}
}

 

class Connect {
  private String host = "192.168.18.5";
     private int port = 8000;
     private Socket socket;
     private boolean state = true;
     String infoString = "";
     String logginInfo = "";
 // boolean state = true;
  public Connect(){
   try{
    socket = new Socket(host,port);
   }catch(IOException e){
    infoString+="连接服务器出错!/n";
   }
  }
  
  public  BufferedReader getReader(Socket socket) throws IOException {
       return new BufferedReader(new InputStreamReader(socket.getInputStream()));
  }
  public  PrintWriter getWriter(Socket socket) throws IOException {
       return new PrintWriter(socket.getOutputStream(),true);
     }
    
     public String register(String ID,String nickname,String password){
      String str = "";
      try{
       BufferedReader br = getReader(socket);
                PrintWriter pw = getWriter(socket);
                pw.println("register");
                pw.println(ID);
                pw.println(nickname);
                pw.println(password);
                str = br.readLine();
      }catch(IOException e){
       infoString+="出现IO错误!/n";
      }
      return str;
     }
    
     public String loggin(String num,String password){
      String serverInfo = "";
      try{
       BufferedReader br = getReader(socket);
                PrintWriter pw = getWriter(socket);
                pw.println("loggin_check");
                pw.println(num);
                pw.println(password);
                serverInfo=(br.readLine());
               
      }catch(IOException e){
       infoString+="连接服务器出现IO错误!/n";
      }
      return serverInfo;
     }
    
     public void addFriend(String friendID){
      String serverInfo = null;
      try{
       BufferedReader br = getReader(socket);
                PrintWriter pw = getWriter(socket);
                pw.println("addfriend");
                pw.println(friendID);
                pw.println(ChatClientFrame.ID);
                System.out.println(ChatClientFrame.ID);
                if((serverInfo=br.readLine()).equals("add_friend_success"))
                JOptionPane.showMessageDialog(null,"添加好友成功!","信息",JOptionPane.INFORMATION_MESSAGE);
                else if(serverInfo.equals("friend_offline"))
                 JOptionPane.showMessageDialog(null,"该用户目前不在线!","信息",JOptionPane.INFORMATION_MESSAGE);
                else if(serverInfo.equals("friend_not_exit"))
                 JOptionPane.showMessageDialog(null,"该用户不存在!","信息",JOptionPane.INFORMATION_MESSAGE);
      }catch(IOException e){
       infoString+="出现IO错误!/n";
      }
     }
    
     public String chat(String friendID){
      String serverInfo = null;
      String friendIP="ERROR";
      try{
       BufferedReader br = getReader(socket);
                PrintWriter pw = getWriter(socket);
                pw.println("chat");
                pw.println(friendID);
                if((serverInfo=br.readLine()).equals("OK")){
                 friendIP=br.readLine();
                 System.out.println(friendID); 
                }
                else if(serverInfo.equals("friend_off_line")){
                 friendIP = serverInfo;
                }
      }catch(IOException e){
       infoString+="出现IO错误!/n";
      }
      return friendIP;
     }
    
     public void offline(){
      try{
       BufferedReader br = getReader(socket);
                PrintWriter pw = getWriter(socket);
                pw.println("offline");
               
      }catch(IOException e){
       infoString+="连接出现IO错误!/n";
      }
     }
 }


public class ChatClient{
 public static void main(String[] args){
  ChatClientFrame frame = new ChatClientFrame();
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setResizable(false);
  frame.setVisible(true);
 }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值