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

📄 chatserver.java

📁 这是用JAVA做的模拟QQ聊天工具
💻 JAVA
字号:
import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.net.*;
import java.applet.Applet;

public class ChatServer extends Applet implements Runnable
{
	Thread kicker=null;
	ThreadGroup dealGroup;              
	JTextArea text=new JTextArea(40,35); 	
	DefaultListModel listM = new DefaultListModel(); 
	JList list;
	int number=0;	
	public void init()
	{
		JLabel message=new JLabel("               Message Text:");
	    JLabel userin=new JLabel("Users:");
    	JList list=new JList(listM);   		
    	setLayout(new BorderLayout());    	
    	JPanel p1=new JPanel(new BorderLayout());
    	p1.add("North",message);
    	text.setEditable(false);
    	p1.add("Center",new JScrollPane(text));//滚动条    	
    	JPanel p2=new JPanel(new BorderLayout());
    	p2.add("North",userin);
    	p2.add("Center",new JScrollPane(list));
    	list.setFixedCellWidth(20);    	
    	add("Center",p1);
    	add("East",p2);
    	show();	
	}	
	public void start()
	{ 
		dealGroup=new ThreadGroup("DealThreads");
		kicker=new Thread(this);
		kicker.start();
	}	
	public void stop()
	{ 
		kicker.stop();
		kicker=null;
		dealGroup.stop();
	}	
	public void destroy()
	{
	}	
	public void run()
	{
		ServerSocket serverSocket=null;
		Socket cSocket;
		try
		{
			serverSocket=new ServerSocket(4567);//4567号端口
		}
		catch(IOException e)
		{
			System.out.println(e);
			return;
		}		
		try
		{
			do
			{
				cSocket=serverSocket.accept();
			    (new DealThread(dealGroup,this,cSocket,++number)).start();
			}
			while(true);
		}
		catch(IOException e)
		{
			System.out.println(e);
			return;
		}
	}
	
	public void appendText(String message)
	{ 
		text.append(message);
	}	
	public void addUser(String userName)//增加用户名单
	{  
		listM.addElement(userName);
	}	
	public void removeUser(String userName)//删除用户
	{
		int count;
		count=listM.getSize();
		for(int i=0;i<count;i++)
		if(userName.equals(listM.getElementAt(i)))
		  {
		  	listM.removeElementAt(i);
		  	break;
		  }
	}	
	public static void main(String [] args)
	{
		ChatServer server=new ChatServer();
		server.init();
		server.start();		
		SFrame f=new SFrame("服务器",server);
		f.setResizable(false);
		f.setBackground(Color.lightGray);
		f.add("Center",server);
		f.resize(500,500);
		f.show();
	}
}
class DealThread extends Thread   //用于处理数据交换
{ 
	ChatServer server;
	Socket cSocket;
	DataInputStream is;
	PrintStream os;
	String userName;
	int number;
	public DealThread(ThreadGroup dG,ChatServer ser,Socket socket,int num)
	{
		super(dG,"DealThread");
		this.server=ser;
		this.cSocket=socket;
		this.number=num;
	}
	public void run()
	{
		try{
			is=new DataInputStream(cSocket.getInputStream());
			os=new PrintStream(cSocket.getOutputStream());
			String fromClient=null,toClient=null;
			boolean first=true,logout=false;
			userName=getData(); //获取用户名
			server.addUser(userName); //添加用户
			do{
				int count;
				if(first)  //第一次收到信息
				  toClient=userName+"has join the chat."; 
				else if(fromClient.equals("Logout"))
				{ //收到退出信息
					logout=true;
					server.removeUser(userName);    //删除该用户
					toClient=userName+" has left the chat."; 
				}
				else
				   toClient=userName+" said:"+fromClient;
				server.appendText(toClient+"\n"); 				
				count=activeCount();
				Thread threads[]=new Thread[count]; //多线程
				enumerate(threads);                 //获取所有线程   
				for(int i=0;i<count;i++)
				if(threads[i]!=this)
				  {  //非本线程
				  	((DealThread)(threads[i])).sendData(toClient); 
				  	if(first)
				  	sendData(((DealThread)(threads[i])).getUserName()+" say hello to you!");
				  }
				 else ((DealThread)(threads[i])).sendData(toClient);
				first=false;
				if(logout)  break;
			}while((fromClient=getData())!=null);	
			//关闭输入输出流和套接字	
			os.close();
			is.close();
			cSocket.close();
		}
		catch(IOException e)
		{
		    System.out.println("Error:"+e);
		}
	}	
	public String getUserName()  //获取用户名
	{ 
		return userName;
	}	
	public String getData()   //获取数据
	{ 
		String fromClient;
		try
		{
			fromClient=is.readLine();
		}
		catch(Exception e)
		{
			System.out.println(e);
			return null;
		}
		return fromClient;
	}	
   boolean sendData(String toClient)//发送数据
	{ 
		try
		{
			os.println(toClient);
			os.flush();
		}
		catch(Exception e)
		{
			System.out.println(e);
			return false;
		}
		return true;
	}
}
class SFrame extends Frame
{
	ChatServer server;
	public SFrame(String Name,ChatServer server)
	{
		super(Name);
		this.server=server;
	}	
	public boolean handleEvent(Event e)
	{
		switch(e.id)
		{
			case Event.WINDOW_DESTROY:
			server.stop();
			server.destroy();
			System.exit(0);
		}
		return super.handleEvent(e);
	}
}

⌨️ 快捷键说明

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