chat.java

来自「一个很好的Java环境的简易聊天程序。不需要服务器」· Java 代码 · 共 94 行

JAVA
94
字号
import java.awt.*;
import java.awt.event.*;
import java.net.*;

class Chat extends Frame
{
  DatagramSocket ds;
  List lst=new List(6);
  TextField tfIP=new TextField(15);
  TextField tfData=new TextField(20);
  public Chat()
  {
    try
    {
      ds=new DatagramSocket(3000); //建立Socket
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }

    this.add(lst,"Center");
    Panel p=new Panel();
    this.add(p,"South");
    p.setLayout(new BorderLayout());
    p.add(tfIP,"West");
    p.add(tfData,"East");
    //以上是图形界面


	new Thread(new Runnable()
      {
       public void run()
        {
         byte[] buf=new byte[1024];
         DatagramPacket dp=new DatagramPacket(buf,1024);
         while(true)
          {
           try
            {
         ds.receive(dp);
           lst.add(new String(buf,0,dp.getLength())+"from"+dp.getAddress().getHostAddress()+":"+dp.getPort(),0); //增加到第一行
            }
            catch(Exception ex)
            {ex.printStackTrace();}
          }
        }

     }).start();

	//以下是动作处理,在消息文本框中输入信息后,按Enter就可以把消息发送出去
    //因此,需要处理Action事件
    tfData.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent e)
      {
        byte[] buf;
        buf=tfData.getText().getBytes();
        try
        {
        DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName(tfIP.getText()),3000);
        ds.send(dp);
        }
        catch(Exception ef)
        {
          ef.printStackTrace();
        }
        tfData.setText(""); //信息发送后,消息文本框中的信息清空
      }

    });
    addWindowListener(new WindowAdapter()
    {
      public void windowClosing(WindowEvent e)
      {
        ds.close();
        dispose();
        System.exit(0);
      }
    });
  }
  
  public static void main(String args[])
  {
   System.out.println("Starting Chat.......");
   Chat mainFrame=new Chat();
   mainFrame.setSize(300,400); //窗口大小为300X400
   mainFrame.setTitle("我们的聊天窗口"); //标题栏信息
   mainFrame.setVisible(true);
   mainFrame.setResizable(false);// 窗口大小不能改变
  }
    
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?