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

📄 server.java

📁 简单的客户端
💻 JAVA
字号:
import java.io.*;
import java.net.*;
import java.util.*;
import java.lang.*;

public class Server extends ServerSocket
{
	private static ArrayList User_List = new ArrayList();
	private static ArrayList Threader = new ArrayList();
	private static LinkedList Message_Array = new LinkedList();
	private static int Thread_Counter = 0;
	private static boolean isClear = true;
	protected static final int SERVER_PORT = 1001;
	//protected FileOutputStream LOG_FILE = new FileOutputStream("d:/connect.log", true);
	
	public Server() throws FileNotFoundException, IOException
	{
		super(SERVER_PORT);
		new Broadcast();
		
		//append connection log
		//Calendar now = Calendar.getInstance();
		//String str = "[" + now.getTime().toString() + "] Accepted a connection\015\012";
		//byte[] tmp = str.getBytes();
		//LOG_FILE.write(tmp);
		
		try
		{
			while (true)
			{
			Socket socket = accept();
			new CreateServerThread(socket);
			}
		}
		finally
		{
			close();
		}
	}
	
	public static void main(String[] args) throws IOException
	{
		new Server();
	}
	
	//--- Broadcast
	class Broadcast extends Thread
	{
		public Broadcast()
		{
			start();
		}
		
		public void run()
		{
			while (true)
			{
				if (!isClear)
				{
					String tmp = (String)Message_Array.getFirst();
					
					for (int i = 0; i < Threader.size(); i++)
					{
						CreateServerThread client = (CreateServerThread)Threader.get(i);
						client.sendMessage(tmp);
					}
					
					Message_Array.removeFirst();
					isClear = Message_Array.size() > 0 ? false : true;
				}
			}
		}
	}
	
	//--- CreateServerThread
	class CreateServerThread extends Thread
	{
		private Socket client;
		private BufferedReader in;
		private PrintWriter out;
		private String Username;
		
		public CreateServerThread(Socket s) throws IOException
		{
			client = s;
			in = new BufferedReader(new InputStreamReader(client.getInputStream()));
			out = new PrintWriter(client.getOutputStream(), true);
			out.println("--- Welcome to this chatroom ---");
			out.println("Input your nickname:");
			start();
		}
		
		public void sendMessage(String msg)
		{
			out.println(msg);
		}
		
		public void run()
		{
			try
			{
				int flag = 0;
				Thread_Counter++;
				String line = in.readLine();
				
				while (!line.equals("bye"))
				{
					if (line.equals("l"))
					{
						out.println(listOnlineUsers());
						line = in.readLine();
						continue;
					}
					
					if (flag++ == 0)
					{
						Username = line;
						User_List.add(Username);
						out.println(listOnlineUsers());
						Threader.add(this);
						pushMessage("[< " + Username + " come on in >]");
					}
					else
					{
						pushMessage("<" + Username + ">" + line);
					}
					
					line = in.readLine();
				}
				
				out.println("--- See you, bye! ---");
				client.close();
			}
			catch (IOException e)
			{}
			finally
			{
				try
				{
					client.close();
				}
				catch (IOException e)
				{}
				
				Thread_Counter--;
				Threader.remove(this);
				User_List.remove(Username);
				pushMessage("[< " + Username + " left>]");
			}
		}
		
		
		private String listOnlineUsers()
		{
			String s ="-+- Online list -+-\015\012";
			
			for (int i = 0; i < User_List.size(); i++)
			{
				s += "[" + User_List.get(i) + "]\015\012";
			}
			
			s += "-+---------------------+-";
			return s;
		}
		
		private void pushMessage(String msg)
		{
			Message_Array.addLast(msg);
			isClear = false;
		}
	}
}

⌨️ 快捷键说明

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