一、创建新项目 首先创建一个新的项目,并命名。

二、实现代码   import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.net.*; import java.io.IOException; import java.lang.String;   public class liaotian extends JFrame{     private static final int DEFAULT_PORT=1;//端口名     private JLabel stateLB;     private JTextArea centerTextArea;     private JPanel southPanel;     private JTextArea inputTextArea;     private JPanel bottomPanel;     private JTextField ipTextField;     private JTextField remotePortTF;     private JButton sendBT;     private JButton clearBT;     private DatagramSocket datagramSoket;     private void setUpUI(){         setTitle("GUI");         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);         setSize(400,400);         setResizable(false);//窗口大小不可改变         setLocationRelativeTo(null);//设置窗口相对于指定组件的位置         stateLB=new JLabel("聊天室");         stateLB.setHorizontalAlignment(JLabel.RIGHT);         centerTextArea=new JTextArea();         centerTextArea.setEditable(false);         centerTextArea.setBackground(new Color(211,211,211));         southPanel=new JPanel(new BorderLayout());         inputTextArea=new JTextArea(5,20);         bottomPanel=new JPanel(new FlowLayout(FlowLayout.CENTER,5,5));         ipTextField=new JTextField("127.0.0.1",8);         remotePortTF=new JTextField(String.valueOf(DEFAULT_PORT),3);         sendBT=new JButton("发送");         clearBT=new JButton("清屏");         bottomPanel.add(ipTextField);         bottomPanel.add(remotePortTF);         bottomPanel.add(sendBT);         bottomPanel.add(clearBT);         southPanel.add(new JScrollPane(inputTextArea),BorderLayout.CENTER);         southPanel.add(bottomPanel,BorderLayout.SOUTH);         add(stateLB,BorderLayout.NORTH);         add(new JScrollPane(centerTextArea),BorderLayout.CENTER);         add(southPanel,BorderLayout.SOUTH);         setVisible(true);     } private void setListener(){     sendBT.addActionListener(new ActionListener(){         public void actionPerformed(ActionEvent e){             final String ipAddress=ipTextField.getText();             final String remotePort=remotePortTF.getText();             if(ipAddress==null||ipAddress.trim().equals("")||remotePort==null||remotePort.trim().equals("")){                 JOptionPane.showMessageDialog(liaotian.this,"请输入IP地址和端口号");                 return;             }             if(datagramSoket==null||datagramSoket.isClosed()){                 JOptionPane.showMessageDialog(liaotian.this,"监听未成功");                 return;             }             String sendContent=inputTextArea.getText();             byte[] buf=sendContent.getBytes();             try{                 centerTextArea.append("我对"+ipAddress+":"+remotePort+"说:\n"+inputTextArea.getText()+"\n\n");                 centerTextArea.setCaretPosition(centerTextArea.getText().length());                 datagramSoket.send(new DatagramPacket(buf,buf.length,InetAddress.getByName(ipAddress),Integer.parseInt(remotePort)));                 inputTextArea.setText("");             }catch(IOException e1){                 JOptionPane.showMessageDialog(liaotian.this, "出错了,发送不成功");                 e1.printStackTrace();             }         };     });     clearBT.addActionListener(new ActionListener(){         public void actionPerformed(ActionEvent e){             centerTextArea.setText("");         }     }); } private void initSocket(){     int port=DEFAULT_PORT;     while(true){         try{             if(datagramSoket!=null&&!datagramSoket.isConnected()){                 datagramSoket.close();             }             try{                 port=Integer.parseInt(JOptionPane.showInputDialog(this,"请输入端口号","端口号",JOptionPane.QUESTION_MESSAGE));                 if(port<1||port>65535){                     throw new RuntimeException("端口号超出范围");                 }             }catch(Exception e){                 JOptionPane.showMessageDialog(null,"你输入的端口不正确,请输入1~65535之间的数");                 continue;             }             datagramSoket=new DatagramSocket(port);             startListen();             stateLB.setText("已在"+port+"端口监听");             break;         }catch(SocketException e){             JOptionPane.showMessageDialog(this, "端口号被占用,请重新设置端口");             stateLB.setText("当前未启动监听");         }     } } private void startListen(){     new Thread(){         private DatagramPacket p;         public void run(){             byte[] buf=new byte[1024];             p=new DatagramPacket(buf,buf.length);             while(!datagramSoket.isConnected()){                 try{                     datagramSoket.receive(p);                     centerTextArea.append(p.getAddress().getHostAddress()+":"+((InetSocketAddress)p.getSocketAddress()).getPort()+"对我说:\n"+new String(p.getData(),0,p.getLength())+"\n\n");                     centerTextArea.setCaretPosition(centerTextArea.getText().length());                 }catch(IOException e){                     e.printStackTrace();                 }             }         }     }.start(); }         public static void main(String[] args) {             liaotian a=new liaotian();             a.setUpUI();             a.initSocket();             a.setListener();         }          }

三、运行结果

用户1和用户2的聊天

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: