1. 程式人生 > >java小型聊天室原始碼

java小型聊天室原始碼

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
 
 
public class UDPChat extends JFrame implements ActionListener{
 
    public TextArea textmessage = null;
    public TextArea sendtext = null;
    public DatagramSocket socket;
    public JScrollBar vsBar;
    public UDPChat()
    {
       super();
       setTitle("小型聊天程式");
       setBounds(200,150,350,280);
       JPanel panel1 = new JPanel();
       JPanel panel2 = new JPanel();
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       setBackground(Color.BLACK);
       textmessage = new TextArea();
       sendtext = new TextArea();
      
       textmessage.setEditable(false);
       textmessage.setColumns(35);
       textmessage.setRows(10);
    //  textmessage.setLineWrap(true);
      
       sendtext.setColumns(35);
       sendtext.setRows(2);
 
       JButton buttonOK = new JButton("確定");
       JButton buttonclean = new JButton("清空");
       JButton buttonquit = new JButton("退出");
       GridLayout grid =  new GridLayout(3,1);
       grid.setHgap(10);
       grid.setVgap(10);
       panel1.setLayout(grid);
    //  panel1.setLayout(new GridLayout(3,1));
 
       panel1.add(buttonOK);
       panel1.add(buttonclean);
       panel1.add(buttonquit);
 
       panel2.setLayout(new FlowLayout());
       panel2.add(textmessage);
       panel2.add(sendtext);
       getContentPane().add(panel1,BorderLayout.EAST);
       getContentPane().add(panel2,BorderLayout.CENTER);
       setVisible(true);
       buttonOK.addActionListener(this);
       buttonclean.addActionListener(this);
       buttonquit.addActionListener(this);
       server();
    }
    public void server()
    {
       try{
           socket = new DatagramSocket(9527);
           byte[] buf = new byte[1024];
           final DatagramPacket dp1 = new DatagramPacket(buf,buf.length);
           Runnable run = new Runnable(){
              public void run()
              {
                  while(true)
                  {
                     try{
                         Thread.sleep(100);
                         socket.receive(dp1);
                         int len = dp1.getLength();
                         String message = new String(dp1.getData(),0,len);
                         String ip = dp1.getAddress().getHostAddress();
                         System.out.println(ip);
                         if(!InetAddress.getLocalHost().getHostAddress().equals(ip))
                            textmessage.append(ip+"\n"+message+'\n');
                     }catch(IOException e)
                     {
                         e.printStackTrace();
                     }
                     catch(InterruptedException e)
                     {
                         e.printStackTrace();
                     }
                  }
              }
           };
           new Thread(run).start();
       }catch(SocketException e)
       {
           e.printStackTrace();
       }
    }
    public static void main(String[] args) {
       UDPChat udp = new UDPChat();
    }
    @Override
    public void actionPerformed(ActionEvent e) {
       // JButton button = (JButton) e.getSource();
       String buttonname =e.getActionCommand();
       if(buttonname.equals("退出"))
           System.exit(0);
       if(buttonname.equals("清空"))
       {
           textmessage.setText("");
       }
       if(buttonname.equals("確定"))
       {
           String iP = "192.168.8.15";
           try {
              InetAddress address =InetAddress.getByName(iP);
              byte []data  = sendtext.getText().getBytes();
              DatagramPacket dp = new DatagramPacket(data,data.length,address,9527);
              String myip = InetAddress.getLocalHost().getHostAddress();
              textmessage.append(myip +"  \n"+sendtext.getText() +"\n");
              socket.send(dp);
              sendtext.setText("");
           } catch (UnknownHostException e1) {
              // TODO Auto-generated catch block
              e1.printStackTrace();
           } catch (IOException e1) {
              // TODO Auto-generated catch block
              e1.printStackTrace();
           }
      
       }
    }
}