⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chat1.java

📁 一个简单的聊天室
💻 JAVA
字号:
package com.chat;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

public class Chat1
{
	private JFrame f;
	private Container contentPane;
	private JTextField tf1;
	private JTextField tfIP;
	private JRadioButton rb1,rb2;
	private JButton btnCon,btnSend,btnExit;
	private JTextArea ta,tb;
	private JLabel labelIP;
	private String strbuf="";
	private DatagramSocket serverSocket,clientSocket;
	private MulticastSocket multiSocket;
	private String userName;
	private String clientName;

	public Chat1()
	{	
		f=new JFrame("ChatRoom");
		contentPane=f.getContentPane();
		f.setSize(460,460);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setResizable(false);
		
		initGUI();
	}
	public void initGUI()
	{
		contentPane.setLayout(new BorderLayout());
		JPanel panel1=new JPanel(new GridLayout(3,1));
		JPanel p11=new JPanel(new FlowLayout(FlowLayout.LEFT));
		p11.add(new JLabel("UDP Connect program"));
		JPanel p12=new JPanel(new FlowLayout(FlowLayout.LEFT));
		ButtonGroup bg=new ButtonGroup();
		rb1=new JRadioButton("群聊");
		rb2=new JRadioButton("私聊");
		bg.add(rb1);
		bg.add(rb2);
		p12.add(rb1);
		p12.add(rb2);
		p12.add(new JLabel("连接状态"));
		tf1=new JTextField(14);
		p12.add(tf1);
		
		JPanel p13=new JPanel(new FlowLayout(FlowLayout.RIGHT));
		labelIP=new JLabel("请输入对方 IP  ");
		tfIP=new JTextField(14);
		p13.add(labelIP);
		p13.add(tfIP);
		panel1.add(p11);
		panel1.add(p12);
		panel1.add(p13);
		contentPane.add(panel1,BorderLayout.NORTH);
		
		JPanel panel2=new JPanel(new FlowLayout());
		panel2.add(new JLabel("Received Msg"));
		ta=new JTextArea(10,30);
		panel2.add(ta);
		ta.setEditable(false);
		int v=ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
		int h=ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
		JScrollPane pane=new JScrollPane(ta,v,h); 
		panel2.add(pane);
		contentPane.add(panel2,BorderLayout.CENTER);
		
		JPanel panel3=new JPanel(new GridLayout(2,1));
		
		JPanel p31=new JPanel(new FlowLayout());
		p31.add(new JLabel("Send Msg"));
		tb=new JTextArea(4,30);
		p31.add(tb);//此行不可以放在71行*******
		int v1=ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
		int h1=ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
		JScrollPane pane1=new JScrollPane(tb,v1,h1); 
		p31.add(pane1);
		
		
		JPanel p32=new JPanel(new FlowLayout());
		btnCon=new JButton("连接");
		btnSend=new JButton("发送");
		btnExit=new JButton("关闭连接");
		btnSend.setEnabled(false);
		btnExit.setEnabled(false);
		p32.add(btnCon);
		p32.add(btnSend);
		p32.add(btnExit);
		
		panel3.add(p31);
		panel3.add(p32);
		contentPane.add(panel3,BorderLayout.SOUTH);
		
		ActionListener rb1Listener=new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				if(rb1.isSelected());
				labelIP.setText("这是群组地址 请点击连接"); 
				tfIP.setText("228.5.6.7");
			}
		};
		
		ActionListener rb2Listener=new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				
				if(rb2.isSelected());
				labelIP.setText("请输入对方 IP地址"); 
				tfIP.setText("");
				
			}
		};
		
		rb1.addActionListener(rb1Listener);			
		rb2.addActionListener(rb2Listener);										
		
		ActionListener listener=new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				if(e.getSource()==btnCon)
				{
					if(rb1.isSelected()==false &&rb2.isSelected()==false)
					{
						tf1.setText("plese choose ServerEnd or ClientEnd!");
						return;
					}
					try
					{
						if(rb1.isSelected())
						{		
							tb.setText("");				
							rb1.setEnabled(false);
							rb2.setEnabled(false);
							tfIP.setText("228.5.6.7");
							userName=JOptionPane.showInputDialog("清输入用户名");
							Server server=new Server();
						}					
						if(rb2.isSelected())
						{
							tb.setText("");
							rb1.setEnabled(false);
							rb1.setEnabled(false);
							clientName=JOptionPane.showInputDialog("清输入用户名");
							Client client=new Client();
						}
					}
					catch(Exception e1)
					{
						e1.printStackTrace();
					}
				}
				
				if(e.getSource()==btnSend)
				{
					strbuf=tb.getText();
					try
					{
						byte[] buffer=new byte[strbuf.length()*2];
						buffer=strbuf.getBytes();
						DatagramPacket packet;
						if(rb1.isSelected())
						{	
							tb.setText("");
							serverSocket=new DatagramSocket();
							packet=new DatagramPacket(buffer,buffer.length,InetAddress.getByName(tfIP.getText()),6003);
							serverSocket.send(packet);
						}
						if(rb2.isSelected())
						{
							if(strbuf.length()>0)
							{
								ta.append(clientName+": "+strbuf+"\n");
							}
							tb.setText("");
							packet=new DatagramPacket(buffer,buffer.length,InetAddress.getByName(tfIP.getText()),6002);
							clientSocket.send(packet);
						}
					}
					catch(Exception e1)
					{
						e1.printStackTrace();
					}
				}
				if(e.getSource()==btnExit)
				{
					try
					{
						tf1.setText("offLine");
						btnSend.setEnabled(false);
						btnExit.setEnabled(false);
						rb1.setEnabled(true);
						rb2.setEnabled(true);
						ta.setText("");
						tb.setText("");
						btnCon.setEnabled(true);
						if(rb1.isSelected())
						{
							serverSocket.close();
							Thread.currentThread().interrupt();
						}
						if(rb2.isSelected())
						{
							clientSocket.close();
							Thread.currentThread().interrupt();
						}
						
					}
					catch(Exception e1)
					{
						e1.printStackTrace();
					}
				}
			}
		};
		btnSend.addActionListener(listener);
		btnCon.addActionListener(listener);
		btnExit.addActionListener(listener);
		
	}
	class Server implements Runnable
	{
		public Server()
		{
			Thread t=new Thread(this);
			t.start();
		}
		public void run()
		{
			
			String s;
			InetAddress group=null;
			multiSocket=null;
			try
			{
				tf1.setText("已连接");
				btnCon.setEnabled(false);
				group=InetAddress.getByName("228.5.6.7");
				multiSocket=new MulticastSocket(6003);
				multiSocket.joinGroup(group);
				btnSend.setEnabled(true);
				btnExit.setEnabled(true);
				while(true)
				{
					byte[] buffer=new byte[512];
					DatagramPacket packet=new DatagramPacket(buffer,buffer.length);
					
					multiSocket.receive(packet);
					Thread.sleep(500);
					//System.out.println("****************");//此句输不出,没有接收到数据包
					String data=new String(packet.getData());
					String ip=packet.getAddress().getHostAddress();
					int port=packet.getPort();
					//ta.append("from "+ip+" port "+port+"says \n"+data.trim()+"\n");
					ta.append(userName+":says \n"+data.trim()+"\n");
				}
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
			finally
			{
				if(multiSocket != null) try{multiSocket.close();}catch(Exception e){e.printStackTrace();}
			}
		}
	}
	class Client implements Runnable
	{
		public Client()
		{
			new Thread(this).start();
		}
		public void run()
		{
			String s;
			try
			{
				btnCon.setEnabled(false);
				clientSocket=new DatagramSocket(6002);
				ta.append(InetAddress.getLocalHost().getHostName()+"port "+6000+"\n");
				btnSend.setEnabled(true);
				btnExit.setEnabled(true);
				tf1.setText("connectint...");
				while(true)
				{
					byte[] buffer=new byte[512];
					DatagramPacket packet=new DatagramPacket(buffer,buffer.length);
					clientSocket.receive(packet);
					s=new String(packet.getData());
					s=s.trim();
					if(s.length()>0)
					{
						//ta.append("\n"+"\nfrom  "+packet.getAddress().getHostAddress()+s+"\n");
					ta.append(clientName+":says"+s+"\n");	
					}
					Thread.sleep(500);
				}
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
			finally
			{
				if(clientSocket != null) try{clientSocket.close();}catch(Exception e){e.printStackTrace();}
			}
		}
	}
	public void go()
	{
		f.setVisible(true);
	}
	public static void main(String[] args)
	{
		new Chat1().go();
	}
}

⌨️ 快捷键说明

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