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

📄 chatclient.java

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

public class ChatClient extends Applet {
    
  	TextField UsName = new TextField(10); //姓名输入文本域
  	TextField ChatFl = new TextField(30);  //聊天输入
	TextField ObChat = new TextField(5);	//聊天对象
  	Button ConBtn = new Button("Connect"); //连接按钮
  	Button DconBtn = new Button("Disconnect");
  	Button SendBtn = new Button("Send Message");
  	TextArea ChatArea = new TextArea(10,40); //显示聊天信息文本框
   	java.awt.List UserList = new java.awt.List(11); //显示在线用户信息
  
   	Socket socket=null;  //连接端口
  	PrintStream ps=null; //输出流
  	Listen listen=null;  //监听线程
  
  	public void init() {  //Applet初始化
	    ChatArea.setEditable(false);	 //设置信息显示框为不可编辑   
	    Panel panel1 = new Panel();  //实例化面板     
  		Panel panel2 = new Panel();        
  		Panel panel3 = new Panel();
  		ObChat.setText("To All");
  		ChatArea.setBackground(Color.white);  //设置组件背景颜色
  		panel1.setBackground(Color.pink);
  		panel2.setBackground(Color.pink);    
	    panel3.setBackground(Color.pink);	    
	    
	    panel1.add(new Label("Name:"));  //增加组件到面板上
	    panel1.add(UsName);
	    panel1.add(ConBtn);
	    panel1.add(DconBtn);    
	    panel2.add(ChatArea);
	    panel2.add(UserList);    
	    panel3.add(ObChat);
	    panel3.add(new Label("Chat:"));
	    panel3.add(ChatFl);
	    panel3.add(SendBtn);	    
	    setLayout(new BorderLayout()); //设置Applet布局管理器
	    add(panel1, BorderLayout.NORTH);  //增加面板到Applet上
	    add(panel2, BorderLayout.CENTER);
	    add(panel3, BorderLayout.SOUTH);
  	}

  	public boolean action(Event evt,Object obj){    //事件处理
  		try{
			if(evt.target==ConBtn){   //点击连接按钮		
			    if (socket==null){
				 	socket=new Socket(InetAddress.getLocalHost(),6000);     //实例化一个套接字			                 
				 	ps=new PrintStream(socket.getOutputStream());   //获取输出流
				 	StringBuffer info=new StringBuffer("Login:");       			                                                      
				 	String userinfo=UsName.getText()+":"+InetAddress.getLocalHost().toString();
				 	ps.println(info.append(userinfo));	//输出信息		
				 	ps.flush();
				 	listen=new Listen(this,UsName.getText(),socket);    //实例化监听线程
				 	listen.start();     //启动线程
				}   
			}
		   	else if(evt.target==DconBtn){    //点击断开连接按钮
		         disconnect();  //调用断开连接方法
		    }
		   	else if(evt.target==SendBtn){   //点击发送按钮
		         if(socket!=null){
				     String str = ObChat.getText().trim();
				     if(str.equals("To All")){
					     StringBuffer msg=new StringBuffer("Connect:");     
						 String msgtxt=new String(ChatFl.getText());
						 ps.println(msg.append(ChatFl.getText()));   //发送信息  
						 
						 }
					 else{
					 	int i,num;
					 	num=UserList.getItemCount();
					 	for(i=0;i<num;i++)
					 	  if(str.equals(UserList.getItem(i))){
					 	  	StringBuffer msg=new StringBuffer("ConnectSl:");     
						 	String msgtxt=new String(ChatFl.getText());
						 	msg.append(ObChat.getText()+":");
						 	ps.println(msg.append(ChatFl.getText()));   //发送信息 
					 	  	}
					 	  }
					 ps.flush();
					 }
				 }
		   	}
		
		catch (Exception ex){
			ex.printStackTrace();  //输出错误信息
		}
    	return true;
  	}   

  	public void disconnect() {   //断开连接方法
     	if(socket!=null){
			ps.println("Quit");  //发送信息
			ps.flush();
	 	}
  	}

  	class Listen extends Thread{    //监听服务器传送的信息
 		String name=null;          //用户名
	 	BufferedReader reader ;    //输入流
 		PrintStream ps=null;     //输出流
 		Socket socket=null;      //本地套接字
 		ChatClient client=null;   //客户端ChatClient实例

 		public Listen(ChatClient p,String n,Socket s) {  
	 		client=p;
	 		name=n;
	 		socket=s;

	 		try{
			    reader = new BufferedReader(new InputStreamReader(s.getInputStream())); //获取输入流
		 		ps=new PrintStream(s.getOutputStream());  //获取输出流

			}
	 		catch(IOException ex){
	    		client.disconnect(); //出错则断开连接
	    		ex.printStackTrace(); //输出错误信息
	   		}
    	}  
  
 		public void run(){  
      		String msg=null;
	  		while(socket!=null){
	     		try{
	     			msg=reader.readLine();  //读取服务器端传来信息
	     		}                 
		 		catch(IOException ex){
	    			client.disconnect(); //出错则断开连接
	    			ex.printStackTrace(); //输出错误信息
		 		}
		 		if (msg==null) {    //从服务器传来的信息为空则断开此次连接
			   		client.listen=null;              
		   			client.socket=null;
		   			client.UserList.removeAll();
		   			return;
		 		}
		 		StringTokenizer st=new StringTokenizer(msg,":");   //分解字符串
		 		String keyword=st.nextToken();         

		 		if(keyword.equals("newUser")) {    //新用户连接信息
		     		client.UserList.removeAll();  //移除原有用户名
			 		while(st.hasMoreTokens()) {    //取得目前所有聊天室用户名
			     		String str=st.nextToken();
				 		client.UserList.add(str);  //增加到用户列表中
			 		}
		 		}
		 		else if(keyword.equals("Connect")) {    //聊天信息	                                                 
	     			String usr=st.nextToken();
			 		client.ChatArea.append(usr);  //增加聊天信息到信息显示框
			 		client.ChatArea.append(st.nextToken("\0"));
			 		client.ChatArea.append("\n");  
			 	}
		 		else if(keyword.equals("Quit")) {   //断天连接信息  
		     		System.out.println("Quit");
		     		try{
		      			client.listen=null;
		      			client.socket.close();  //关闭端口
			  			client.socket=null;
             		}
             		catch(IOException e){}
			  		client.UserList.removeAll();  //移除用户列表	 
			 		return;
		 		}
	  		}
 		}     
	}
}     

⌨️ 快捷键说明

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