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

📄 cconnect.java

📁 用JAVA写的聊天室程序
💻 JAVA
字号:
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import java.awt.event.*;

public class cConnect extends Thread	//保持与服务器间的连接
{
	Socket				toServer;
	ObjectOutputStream	sToServer;
	ObjectInputStream	fromServer;
	Message				Mdata;
	String				LogonName;
	JTextArea			Tshow;
	JScrollPane			TshowScro;	//滚动条
	JList				Online;
	JScrollPane			OnlineScro;
	Vector				UserList;
	JCheckBox			MPrivate;	//复选框
	public cConnect()
	{
		Mdata=new Message(new Users(),"",1);
		Tshow=new JTextArea();
		TshowScro=new JScrollPane(Tshow);
		Online=new JList();
		OnlineScro=new JScrollPane(Online);
		UserList=new Vector(1,1);
		MPrivate=new JCheckBox("不公开");
	}
	
	boolean ConToServer(String Addr)	//与服务器创建连接
	{	
		try
		{
			toServer=new Socket(Addr,1629);
			fromServer=new ObjectInputStream(toServer.getInputStream());
			sToServer=new ObjectOutputStream(toServer.getOutputStream());
			SendtoServer(Mdata);
			Mdata=(Message)GetfromServer();
			return DoMessage(Mdata);	//如果连接服务器成功,DoMessage()将返回true
		}
		catch(Exception e)
		{
			JOptionPane.showMessageDialog(null,"连接服务器失败!"+e);
		}
		return false;
	}
	
	synchronized void tostart()	//启动线程
	{
		try
		{
			this.start();
		}
		catch(Exception e)
		{
			JOptionPane.showMessageDialog(null,"start failed....\n"+e);
		}
	}
	
	public void run()
	{
		while(true)
		{
			try
			{
				Mdata=(Message)GetfromServer();	//读取从服务器发送来的Message对象
				DoMessage(Mdata);	//调用函数以分析Message信息并进行处理
			}
			catch(Exception e)
			{
				JOptionPane.showMessageDialog(null,"run failed\n"+e);
				break;
			}
		}
	}
	
	boolean DoMessage(Message todo)	//处理从服务器接收到的Message对象
	{
		switch(todo.type)
		{
			case 0:
				JOptionPane.showMessageDialog(null,todo.message);
				break;
			case 1:
				JOptionPane.showMessageDialog(null,todo.message);
				return true;	//连接成功
			case 2:
				JOptionPane.showMessageDialog(null,todo.message);
				return true;	//注册用户成功
			case 3:
				LogonName=todo.user.Name;
				JOptionPane.showMessageDialog(null,todo.message);
				getlist();
				this.tostart();
				return true;	//登录成功
			case 5:	//一般消息
				this.Tshow.setText(this.Tshow.getText()+todo.message+"\n");
				break;
			case 7:	//其它用户登录消息并更新用户列表
				this.Tshow.setText(this.Tshow.getText()+todo.message+"\n");
				if(!todo.user.Name.equals(LogonName))
				{
					this.UserList.addElement(todo.user.Name);
					this.Online.setListData(UserList);
				}
				break;
			case 8:	//其它用户离线消息并更新用户列表
				this.Tshow.setText(this.Tshow.getText()+todo.message+"\n");
				for(int i=0;i<UserList.size();i++)
				{
					if(todo.user.Name.equals(UserList.elementAt(i)))
					{
						UserList.removeElementAt(i);
						break;
					}
				}
				this.Online.setListData(UserList);
				//JOptionPane.showMessageDialog(null,"setlistdata");
				break;
			case 10:	//私聊消息
				todo.message.replaceAll("<"+LogonName+">","你");
				this.Tshow.setText(this.Tshow.getText()+todo.message+"\n");
				break;
		}
		return false;
	}
	
	void getlist()	//向服务器请求获取当前在线用户列表
	{
		try
		{
			Mdata.type=6;
			SendtoServer(Mdata); 
			UserList=(Vector)GetfromServer();
			this.Online.setListData(UserList);
		}
		catch(Exception e)
		{
			JOptionPane.showMessageDialog(null,"获取用户列表失败\n"+e);
		}
	}
	
	synchronized boolean SendMsg(String Minfo)	//发送消息
	{
		Message Msg=new Message(new Users(),Minfo,4);
		try
		{
			if(Msg.message.trim().replace("\n","").equals(""))
			{
				JOptionPane.showMessageDialog(null,"请输入消息内容!");
				return false;
			}
			Msg.user.Name=LogonName;
			Msg.user.Password=Online.getSelectedValue().toString();
			//在此时,Password用于存储接收者的用户名
			if(Msg.user.Password.equals(LogonName))
			{
				JOptionPane.showMessageDialog(null,"公共场合,请不要自言自语!");
				return false;
			}
			if(MPrivate.isSelected())
				Msg.type=9;
			SendtoServer(Msg);
			return true;
		}
		catch(Exception e)
		{
			JOptionPane.showMessageDialog(null,"发送消息失败!\n请在列表中选择收件人!");
			return false;
		}
	}
	
	synchronized boolean SendInfo(Message info)	//提交注册,登录所需的用户信息
	{
		try
		{
			Mdata=info;
			SendtoServer(Mdata);
			Mdata=(Message)GetfromServer();
			return DoMessage(Mdata);	//如果注册或登录成功 DoMessage()将返回true
		}
		catch(Exception e)
		{
			return false;
		}
	}
	
	void SendtoServer(Object toClient)	//将Message对象发送到服务器
	{				
		try
		{
			sToServer.writeObject(toClient);
		}
		catch(Exception e)
		{
			JOptionPane.showMessageDialog(null,"与服务器已经断开连接\n程序即将关闭");
			System.exit(0);
		}		
	}
	
	Object GetfromServer()	//接收从服务器发送来的Message对象
	{
		try
		{
			return fromServer.readObject();
		}
		catch(Exception e)
		{
			JOptionPane.showMessageDialog(null,"与服务器已经断开连接\n程序即将关闭");
			System.exit(0);
		}
		return null;
	}
}

⌨️ 快捷键说明

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