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

📄 javachat.txt

📁 JAVACHAT!一个简单的JAVA聊天程序
💻 TXT
字号:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.util.*;


class Message implements Serializable {
public volatile String senderID;
public volatile String msgText;
}


class client extends JFrame implements ActionListener,Runnable
{
	Socket socket = null;
	JLabel l1,l2,l3,l4,l5,l6,jtf3;
	JTextField jtf1,jtf2,jtf4,jtf5;
	TextArea ta;
	Message msg = new Message();
	InetAddress host;
	int port = 5000;
	Thread t = null;
	JButton jb,jb2,jb3;
	
	client(String s)	
	{
		super(s);
		
		myadapter a = new myadapter(this);
		addWindowListener(a);
		
		l5 = new JLabel("Enter IP : ");
		add(l5);
		jtf4 = new JTextField(15);
		add(jtf4);
		jtf4.setText("127.0.0.1");
		
		add(new JLabel("                          "));
		
		l6 = new JLabel("Enter Port : ");
		add(l6);
		jtf5 = new JTextField(15);
		add(jtf5);
		jtf5.setText("5000");
		
		l1 = new JLabel("Nick Name :  ");
		add(l1);
		jtf1 = new JTextField(15);
		add(jtf1);
		
		jb2 = new JButton("Connect");
		add(jb2);
		jb2.addActionListener(this);
		
		jb3 = new JButton("Disconnect");
		add(jb3);
		jb3.addActionListener(this);
		jb3.setEnabled(false);
				
		add(new JLabel("                                        "));
		
		l2 = new JLabel("Message : ");
		add(l2);
		jtf2 = new JTextField(34);
		add(jtf2);
		jtf2.setEditable(false);
					
		jb = new JButton("Send Message");
		add(jb);
		jb.addActionListener(this);
		jb.setEnabled(false);
		
		l3 = new JLabel("Status : ");
		add(l3);
		jtf3 = new JLabel("Not connected to the server...");
		add(jtf3);
		
		add(new JLabel("                                                                            "));
				
		l4 = new JLabel("Recieved Messages : ");
		add(l4);
		ta = new TextArea("",15,80);
		add(ta);
		ta.setFont(Font.getFont("verdana"));
		ta.setBackground(Color.ORANGE);
		ta.setEditable(false);
		
		jtf3.setText("Not connected to Server, click connect");		
	}
	
	public void actionPerformed(ActionEvent ae)
	{
		try{
			String str = ae.getActionCommand();
			
			if(str.equals("Disconnect"))
			{
				try
				{
					jb.setEnabled(false);
					jtf2.setEditable(false);
					jb2.setEnabled(true);
					jb3.setEnabled(false);
					jtf4.setEditable(true);
					jtf5.setEditable(true);
					jtf1.setEditable(true);
					socket.close();				
					socket = null;					
				}
				catch(Exception e)
				{}
			}
			
			if(str.equals("Send Message"))
			{
				msg.senderID = jtf1.getText();
			
				msg.msgText = jtf2.getText();
				jtf2.setText("");
			
				if(!msg.senderID.equals("") && !msg.msgText.equals(""))				
				{
					sendData();
				}
				else
				jtf3.setText("Message was not sent, type a message");
			}
			
			if(str.equals("Connect"))
			{
				try{
				host = InetAddress.getByName(jtf4.getText());
				String p = jtf5.getText();
				
				try{
					if(socket!=null)
					{
						socket.close();
						socket = null;
					}
					}
					catch(Exception e)
					{}
								
				if(!jtf1.getText().equals(""))
				{
					socket = new Socket(host,Integer.parseInt(p));
				
				ObjectOutputStream obj = new ObjectOutputStream(socket.getOutputStream());
				msg.senderID = jtf1.getText();
				msg.msgText = " is now online at "+new Date().toString();
				obj.writeObject(msg);
				
				jtf2.setEditable(true);
				jb.setEnabled(true);
				jb2.setEnabled(false);
				jb3.setEnabled(true);
				jtf4.setEditable(false);
				jtf5.setEditable(false);
				jtf1.setEditable(false);
				
				jtf3.setText("Connection established with Server, start chatting");
				
				t = new Thread(this,"Reading");
				t.start();
				}
				}
			catch(Exception e)				
			{
				jtf3.setText("Could not connect to Server, connect again");
			}
			}
			}
			catch(Exception e)
			{	
				jtf3.setText("Action Error");
			}
	}
	
	public void sendData()
	{
		try
		{
			ObjectOutputStream obj = new ObjectOutputStream(socket.getOutputStream());
			if(!msg.senderID.equals("") && !msg.msgText.equals(""))
			{
				obj.writeObject(msg);
				jtf3.setText("Message was sent successfully");
			}
			msg.senderID = "";
			msg.msgText = "";
		}
		catch(Exception e)
		{
				jtf3.setText("Error occured while sending message");	
		}
	}
	
	
public void run()
	{
		try
		{
				
			while(true)			
			{
				ObjectInputStream obj = new ObjectInputStream(socket.getInputStream());
				Message msg = new Message();
				msg = (Message) obj.readObject();
				if(msg.senderID!=null && msg.msgText!=null)
				ta.append(msg.senderID+" >> "+msg.msgText+"\n");
				
			}
		
		}
		catch(Exception e)
		{
			jtf2.setEditable(false);
			jb2.setEnabled(true);
			jb.setEnabled(false);
			jb3.setEnabled(false);
			jtf4.setEditable(true);
			jtf5.setEditable(true);
			jtf1.setEditable(true);
			jtf3.setText("Connection Lost");
		}
	}

}

class demo
{
	public static void main(String a[])
	{
		client f = new client("Messenger by Kashif Khan");
		f.setLayout(new FlowLayout());
		f.setSize(600,425);
		f.setResizable(false);
		f.setVisible(true);
	}
}

class myadapter extends WindowAdapter
{
	client f;
	public myadapter(client j)
	{
		f = j;
	}
	public void windowClosing(WindowEvent we)
	{
		f.setVisible(false);
		try{
			f.socket.close();
			f.dispose();
			}
			catch(Exception e)
			{
			}
			System.exit(0);
	}
}











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


class Message implements Serializable {
public volatile String senderID;
public volatile String msgText;
}

class data
{
	public volatile int signal;
	public volatile int count;
}

class ser extends JFrame implements ActionListener,Runnable
{
	Thread t;
	JButton a,b;
	JTextField jtf2;
	JLabel jtf;
	TextArea ta;
	
	
	ServerSocket server;
	Message msg = new Message();
	data flag = new data();
					
	Socket count[] = new Socket[5];
	int cj = 5;
	int cl = 0;
		
	
	
	
ser(String s)
	{
super(s);

flag.signal = 0;
flag.count = 0;


JLabel l3 = new JLabel("Enter Port No. : ");
add(l3);

jtf2 = new JTextField(7);
jtf2.setText("5000");
add(jtf2);

JLabel l1 = new JLabel("Start the Server");
add(l1);

a = new JButton("Start");
a.addActionListener(this);
add(a);

JLabel l2 = new JLabel("Stop the Server");
add(l2);

b = new JButton("Stop");
b.addActionListener(this);
add(b);
b.setEnabled(false);

JLabel l4 = new JLabel("Status : ");
add(l4);

add(new JLabel("    "));

jtf = new JLabel("Server is not running...");
add(jtf);

ta = new TextArea("",15,70);
ta.setEditable(false);
ta.setBackground(Color.WHITE);
ta.setFont(Font.getFont("verdana"));
add(ta);

				
mywindowadapter a = new mywindowadapter(this);
addWindowListener(a);


	}
	
	public void actionPerformed(ActionEvent ae)
	{
		try{
			String str = ae.getActionCommand();
			
			if(str.equals("Start"))
			{
				String str2 = jtf2.getText();
				if(!str2.equals(""))
				{
					try
					{
						server = new ServerSocket(Integer.parseInt(str2));
						jtf.setText("Server is running....");
						jtf2.setEnabled(false);
						
						a.setEnabled(false);
						b.setEnabled(true);
						
						flag.count = 0;
					
					count = new Socket[5];
					cj = 5;
					cl = 0;
												
					t = new Thread(this,"Running");
					t.start();
						
					}
					catch(Exception e)
					{
						jtf.setText("Either the port no. is invalid or is in use");
					}
				}
				else
					jtf.setText("Enter port no.");
				
			}
			if(str.equals("Stop"))
			{
				try{	
				server.close();
				}
				catch(Exception ee)
				{
					jtf.setText("Error closing server");
				}
				jtf.setText("Server is closed");
				jtf2.setEnabled(true);
				a.setEnabled(true);
				b.setEnabled(false);
				server = null;
				t = null;
				
				for(int i=0;i<flag.count;i++)
				{
					try{
						count[i].close();
					   }
					catch(Exception e)
					{
					}
				}
				
			}
		}
		catch(Exception ex)
		{
		}
	}

public void run()
{
	
	
	
		while(true)
		{
			if(server.isClosed())
			return;
						
			try{
					
					Socket client = server.accept();
									
					ObjectInputStream obj = new ObjectInputStream(client.getInputStream());
					msg = (Message) obj.readObject();
					
					ta.append(msg.senderID+" >> "+msg.msgText+"\n");
					
					if(cl<cj)
					{
						count[cl] = client;
						cl++;
					}
					else
					{
						Socket temp[] = new Socket[cj];
						for(int i=0;i<cj;i++)
						{
							temp[i] = count[i];															
						}
						
						count = new Socket[cj+5];
						for(int i=0;i<cj;i++)
						{
							count[i] = temp[i];
						}
						count[cj] = client;
						cj = cj+5;
						cl++;
					}
					
					flag.count = cl;
					
					for(int i=0;i<flag.count;i++)
					{
					try{
						ObjectOutputStream objw = new ObjectOutputStream(count[i].getOutputStream());
						objw.writeObject(msg);
					   }catch(Exception e)
						{}
					}
							
					new newthread(client,msg,flag,count,this,server);
									
				}
				catch(Exception e)
				{
					jtf.setText("Server is stopped");
					jtf2.setEnabled(true);
					try{
					server.close();
					}
					catch(Exception ey)
					{
						jtf.setText("Error closing server");
					}
													
				}
				
			
		}
		

	
}
	
}

class server
{
	public static void main(String a[])throws IOException
	{
		ser f = new ser("Chat Server by Kashif Khan");
		f.setLayout(new FlowLayout());
		f.setSize(550,365);
		f.setResizable(false);
		f.setVisible(true);
	}
}



class newthread implements Runnable
{
	Thread t;
	Socket client;
	Message msg;
	data flag;
	Socket count[];
	ser f;
	ServerSocket server;
	
	newthread(Socket client,Message msg,data flag,Socket count[],ser f,ServerSocket server)
	{
		t = new Thread(this,"Client");
		this.server = server;
		this.client = client;
		this.msg = msg;
		this.f = f;
		this.flag = flag;
		this.count = count;
		t.start();
	}
	
	public void run()
	{
		String name = msg.senderID;
		try
		{
		while(server.isClosed()!=true)
			{
				ObjectInputStream obj = new ObjectInputStream(client.getInputStream());
				msg = (Message)obj.readObject();
				if(msg.senderID!=null && msg.msgText!=null)	
				{
					f.ta.append(msg.senderID+" >> "+msg.msgText+"\n");
				}
				name = msg.senderID;
				
				for(int i=0;i<flag.count;i++)
					{
					try{
						ObjectOutputStream objw = new ObjectOutputStream(count[i].getOutputStream());
						objw.writeObject(msg);
					   }catch(Exception e)
						{}
					}
			}
			
			if(server.isClosed())
			{
				for(int i=0;i<flag.count;i++)
				{
					try{
						count[i].close();
					   }
					catch(Exception e)
					{
					}
				}
			}
				
		}
		catch(Exception e)
		{
				f.ta.append(name+" is offline\n");		
				try
				{
					msg.msgText = " is offline\n";
					for(int i=0;i<flag.count;i++)
					{
					try{
						ObjectOutputStream objw = new ObjectOutputStream(count[i].getOutputStream());
						objw.writeObject(msg);
					   }catch(Exception ex)
						{}
					}
					client.close();
				}
				catch(Exception ex)
				{
					
				}
		}
	}
}



class mywindowadapter extends WindowAdapter
{
	ser f;
	public mywindowadapter(ser j)
	{
		f = j;
	}
	public void windowClosing(WindowEvent we)
	{
		f.setVisible(false);
		try{
			f.server.close();
			}
			catch(Exception e)
			{
			}
			f.dispose();
			System.exit(0);
	}
}

⌨️ 快捷键说明

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