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

📄 controlmes.java

📁 JAVA编写的聊天小程序!!程序默认需放到D:下
💻 JAVA
字号:
package group.client;

import java.io.*;
import java.net.*;
import javax.swing.*;
import group.Customer;
import group.Message;

/**
 用于控与服务器端连接的类
*/
public class ControlMes
{
	private String ID;							//保存登录成功的用户的ID
	private ObjectOutputStream objOut;					//与服务器传输数据的输入和输出流
	private ObjectInputStream objIn;
	private Socket clientSocket;

	private Client client;
	private ClientFrame conFrame;

	public ControlMes(Client c, ClientFrame cFrame)
	{
		client = c;
		conFrame = cFrame;
	}

	/**
	 此方法用于发送消息给服务器
	 @param mes 要发送到服务器的消息辽符串
	*/
	public void sendMes(String mes)
	{
		Message mesObj = new Message();
		setMesObj(mesObj, mes, this.ID, "", false);
		write(mesObj);
	}

	/**
	 此方法用来发送悄悄话到服务器
	 @param toFrendID 接收悄悄话的好友的ID
	 @param mes 消息字符串
	*/
	public void sendLatent(String toFrendID, String mes)
	{
		Message mesObj = new Message();
		setMesObj(mesObj, mes, ID, toFrendID, true);
		write(mesObj);
	}

	/*
	 设置Message对象的方法
	*/
	private void setMesObj(Message mesObj, String mes, String id, String toFrendID, boolean latent)
	{
		mesObj.setMessage(mes);
		mesObj.setID(id);
		mesObj.setToFrendID(toFrendID);
		mesObj.setLatent(latent);
	}

	/**
	 此方法用来发送登录消息
	 @param ID 用户登录的ID
	 @param passWord 用户登录的密码
	 */
	public void sendLogin(String ID, String passWord)
	{
		Customer cusObj = new Customer();
		this.ID = ID;
		setCusObj(cusObj, ID, passWord, "", true, false, false);
		write(cusObj);
	}

	/**
	 此方法用来发送注册消息
	 @param passWord 用户注册的密码
	 @param name 用户注册的昵称
	*/
	public void buildID(String passWord, String name)
	{
		Customer cusObj = new Customer();
		setCusObj(cusObj, "", passWord, name, false, true, false);
		write(cusObj);
	}

	/*
	 用于设置Customer对象的方法
	*/
	private void setCusObj(Customer cusObj, String id, String pass, String name, boolean login, boolean newID, boolean move)
	{
		cusObj.setID(id);
		cusObj.setPassWord(pass);
		cusObj.setName(name);
		cusObj.setLogin(login);
		cusObj.setNewID(newID);
		cusObj.setMove(move);
	}

	/*
	 此方法用来发写对象给服务器
	*/
	private void write(Object obj)
	{
		try
		{
			objOut.writeObject(obj);
		}catch(IOException IO_e)
		{
			if(obj instanceof Message)
			{
				conFrame.updateMes("发送消息时出错:");
			}
			else
			{
				conFrame.updateMes("注册或登录时出错:");
			}

			conFrame.updateMes(IO_e.toString());
			return;
		}
	}

	/**
	 用于接收从服务器接消息
	*/
	public void inceptObj()
	{
		Object obj = null;

		try
		{
										System.out.println("readObject()前: " + obj);
			obj = objIn.readObject();
										System.out.println("readObject()后: " + obj);
		}catch(IOException IO_e)
		{
			System.out.println("读取对象出错");
			System.out.println(IO_e.toString());
			JOptionPane.showMessageDialog(conFrame,
				"与服务器的连接断开,程序即将关闭!!!",
				"错误", JOptionPane.ERROR_MESSAGE);
			System.exit(1);
		}catch(ClassNotFoundException CNF_e)
		{
			conFrame.updateMes("接收消息时出现错误:");
			conFrame.updateMes(CNF_e.toString());
			return;
		}catch(Exception e)
		{
		}

		if(obj instanceof Message)
		{
			Message mesObj = (Message)obj;
			disposeMes(mesObj);
		}
		else if(obj instanceof Customer)
		{
			Customer cusObj = (Customer)obj;
			disposeCus(cusObj);
		}
	}

	/*
	处理消息对象用的方法
	*/
	private void disposeMes(Message mesObj)
	{
		String mes = mesObj.getMessage();
		conFrame.updateMes(mes);
	}

	/*
	处理用户状态对象用的方法
	*/
	private void disposeCus(Customer cusObj)
	{
		String tmpID = cusObj.getID();
		String tmpName = cusObj.getName();

		if(cusObj.isMove() && (!tmpID.equals(ID)))
		{
			if(tmpName.length() > 8)
			{
				tmpName = tmpName.substring(0, 7) + "..";
			}

			String moveID = tmpName + "[" + tmpID + "]" + "move";
			conFrame.updateFrend(moveID);
		}
		else if(cusObj.isNewID() && (!tmpID.equals("faild")))
		{
			JOptionPane.showMessageDialog(null,
				"注册成功," + "您的ID号是: " + tmpID, "注册成功", JOptionPane.INFORMATION_MESSAGE);
			client.startLogin();
		}
		else if(cusObj.isLogin() && (!tmpID.equals(ID)))
		{
			if(tmpName.length() > 8)
			{
				tmpName = tmpName.substring(0, 7) + "..";
			}
			conFrame.updateFrend(tmpName + "[" + tmpID + "]");
		}
		else if(cusObj.isLogin() && tmpID.equals(ID))
		{
			if(tmpName.length() > 8)
			{
				tmpName = tmpName.substring(0, 7) + "..";
			}

			conFrame.updateFrend(tmpName + "[" + ID + "]");
			client.startFrame();
		}
		else if(!cusObj.isLogin() && tmpID.equals(this.ID))
		{
			JOptionPane.showMessageDialog(null,
				"登录不成功!!!请重试。", "登录不成功", JOptionPane.INFORMATION_MESSAGE);
			client.startLogin();
		}
	}

	/**
	 接收一个连接服务器的Socket对象,从中创建对象流
	 @param soc 连接服务器的Socket
	*/
	public void setSocket(Socket soc)
	{
		clientSocket = soc;

		int i = 0;

		for(; i < 5; i++)							//这个循环用来尝试连接服务器5次
		{
			try
			{
				objOut = new ObjectOutputStream(clientSocket.getOutputStream());
				objIn = new ObjectInputStream(clientSocket.getInputStream());
				break;
			}catch(IOException IO_e)
			{
			}

			try
			{
				Thread.sleep(2000);
			}catch(InterruptedException e)
			{
			}
		}

		if(i > 4)
		{
			JOptionPane.showMessageDialog(conFrame,
				"连接服务器出错!!!请稍后再试.",
				"错误", JOptionPane.ERROR_MESSAGE);
			System.exit(1);
		}
	}
}



⌨️ 快捷键说明

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