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

📄 chatserver.java

📁 Java applet制作聊天室,,,,,,,,,,,
💻 JAVA
字号:
import java.net.*;
import java.io.*;
import java.util.*;


public class ChatServer {

	static int Port=6000;  //端口号
  	static Vector Clients=new Vector(10);   //存储连接客户信息
  	static ServerSocket SvSocket=null;    //建立服务器socket
  	static Socket socket=null;   //套接字连接

  	public ChatServer() {
		try {
  			System.err.println("Server start...");
	    	SvSocket=new ServerSocket(Port);    //初始化服务器套接字
			while(true){
		    	socket=SvSocket.accept();   //等待连接
		    	System.err.println(socket.getInetAddress()+"连接\n"); //得到客户机地址
		    	Client client=new Client(socket);  //实例化一个客户线程
			    Clients.addElement(client);  //增加客户线程到向量中
			   	client.start();   //启动线程
				NfChatRoom();   //监视聊天室连接变化
			}
		}
		catch(Exception ex) {
	    	ex.printStackTrace(); //输出出错信息
		}
  	}

  	public static void NfChatRoom() {
		StringBuffer newUser=new StringBuffer("newUser");
	 	for(int i=0;i<Clients.size();i++){
	     	Client c=(Client)Clients.elementAt(i);
		 	newUser.append(":"+c.name);	//客户端姓名字符串
	 	}
	 	SdClientMsg(newUser);   //发送信息到客户端
  	}

  	public static void SdClientMsg(StringBuffer message){
     	for(int i=0;i<Clients.size();i++){
	     	Client client=(Client)Clients.elementAt(i); //分别得到每个客户端的连接
		 	client.send(message);  //发送信息
	 	}
  	}

  	public static void SdSlClient(StringBuffer msge,String Name){
  		for(int i=0;i<Clients.size();i++){
  			Client client=(Client)Clients.elementAt(i);
  			if(client.name.equals(Name)){
  				client.send(msge);
  			}

  			}
  		}

  	public void closeAll()	{   //关闭所有连接
     	while(Clients.size()>0) {   //遍历整个Vector
			Client client=(Client)Clients.firstElement();  //得到一个客户端
		 	try{
		     	client.socket.close(); //关闭端口
		 	}
		 	catch(IOException ex){
		     	ex.printStackTrace(); //输出错误信息
		 	}
		    Clients.removeElement(client); //移出客户端信息
		}
	}

 	public static void disconnect(Client c){     //断开客户端
		try{
		 	System.err.println(c.ip+"断开连接q\n");
	     	c.send(new StringBuffer("Quit"));   //向客户发送断开连接信息
		 	c.socket=null;	//关闭端口
	 	}
	 	catch(Exception ex){
	    	ex.printStackTrace();
	 	}
	    Clients.removeElement(c);   //移出客户端信息
  	}

    public static void main(String[] args) {
    	new ChatServer();      //实例化一个ChatServer类
  	}

  	class Client extends Thread  {
	    Socket socket;    //连接端口
		String name;   //用户姓名
		String ip;    //客户端IP地址
	 	BufferedReader reader ;  //输入流
		PrintStream ps;   //输出流

		public  Client(Socket s){
		   socket=s;
		   try{
		       reader = new BufferedReader(new InputStreamReader(s.getInputStream())); //得到输入流
			   ps=new PrintStream(s.getOutputStream());     //得到输出流
			   String info=reader.readLine();   //读取接受到的信息
			   StringTokenizer stinfo=new StringTokenizer(info,":");  //分解字符串
			   String head=stinfo.nextToken();    //获取关键字
	           if(stinfo.hasMoreTokens())
			   		name=stinfo.nextToken();     //获取用户名
			   if(stinfo.hasMoreTokens())
			   		ip=stinfo.nextToken();    //获取IP地址
		   }
		   catch(IOException ex){
		       ex.printStackTrace();
		   }
		}

		public void send(StringBuffer msg) {
		   ps.println(msg);   //输出信息
		   ps.flush();
		}

		public void run(){
		   	while(true){
		       	String line=null;
			   	try{
			      line=reader.readLine();  //读取数据流
			   	}
			   	catch(IOException ex){
			       ex.printStackTrace(); //输出错误信息
				   ChatServer.disconnect(this); //断开连接
				   ChatServer.NfChatRoom(); //更新信息
				   return;
			   	}

			   	if(line==null){    //客户离开
				   ChatServer.disconnect(this);
				   ChatServer.NfChatRoom();
				   return;
				}

			   	StringTokenizer st=new StringTokenizer(line,":"); //分解字符串
			   	String keyword=st.nextToken();

			   	if(keyword.equals("Connect")){  //发送来的是聊天信息
			       	StringBuffer msg=new StringBuffer("Connect:");
				   	msg.append(name);  //在信息上增加用户名
				   	msg.append(st.nextToken("\0"));
				   	ChatServer.SdClientMsg(msg);      //发送聊天语句到各个客户端
			   	}
			   	else if(keyword.equals("ConnectSl")){
			   		String SlName = st.nextToken();
			   		String SlMsg = st.nextToken("\0");
			   		StringBuffer msg=new StringBuffer("Connect:");
			   		msg.append(name+" say alone to you");
			   		msg.append(SlMsg);
			   		ChatServer.SdSlClient(msg,SlName);
			   		StringBuffer msg1=new StringBuffer("Connect:");
			   		msg1.append("you say alone to "+SlName);
			   		msg1.append(SlMsg);
			   		ChatServer.SdSlClient(msg1,name);
			   	}
			   	else if(keyword.equals("Quit")){ 	//退出命令
                 
                    ChatServer.disconnect(this);   //断开连接
				   	ChatServer.NfChatRoom();   //刷新信息
				}
			}
		}
	}
}

⌨️ 快捷键说明

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