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

📄 client.java

📁 是一个JAVA通讯程序.功能不多
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
package clientele;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.Vector;
import javax.swing.JOptionPane;
import setting.AudioPlay;
import setting.Embody;
import setting.User;


public class Client
{
	/**
	 * 定义全局变量
	 */
	public String message;
	public int id;
	/**
	 * 定义Socket 通过"套接字"向网络发出请求或者应答网络请求
	 */
	private static Socket socket;

	/**
	 客户端主界面
	 */
	private static ClientMainUI mainUI;

	/**
	 * 树形好友列表
	 */
	static FriendTree friendTree;

	/**
	 * 修改个人信息基面
	 */
	static ModifyUserUI modify;

	/**
	 * 登录界面
	 */
	static LoginUI loginui;

	/**
	 * 注册界面
	 */
	static UserRegUI userRegUI;

	/**
	 * 聊天窗口
	 */
	private static ChatUI chatui;
	
	/**
	 * 发企业信息
	 */
	private static InchatUI inchatui;
	
	/**
	 * 消息验证
	 */
	private static InchatverUI inchatver;
	
	/**
	 * 消息窗口
	 */
	private static InchatarrivUI inchatarrivui;
    /**
     *聊天记录窗口 
     */
	private static Chatrecord chatrecord;
	/**
	 * 对象输入流
	 */
	private ObjectInputStream netIn;

	/**
	 * 对象输出流
	 */
	private ObjectOutputStream netOut;

	/**
	 * 保存用户聊天窗口souceID和destID更据它判断是否需要NEW新的窗口
	 */
	@SuppressWarnings("unchecked")
	private Vector chatUIvector = new Vector();
	
	/**
	 * 保存用户聊天记录窗口souceID和destID更据它判断是否需要NEW新的窗口
	 */
	@SuppressWarnings("unchecked")
	private Vector chatrecordvector = new Vector();
	/**
	 * 客户端运行标志
	 */
	private boolean runFlag = true;

	/**
	 * 用来保存自己的信息,其值常改变
	 */
	private User userInfo;

	/**
	 * 用户登录成功后 信息保存在此对象 其值不再改变 用于获取ID,设置窗体标题
	 */
	private User constuser = new User();

	/**
	 * 延时接收信令信号量
	 */
	private static boolean acceptorder = false;

	/**
	 * 控制ClientMainUI中 jLabel显示
	 */
	private static boolean hidden = true;

	/**
	 * 暂时储存信令
	 */
	private String ordersave;

	/**
	 * 储存添加好友和下线时的信令
	 */
	@SuppressWarnings("unchecked")
	private Vector orderSys = new Vector();

	/**
	 * 用于客户端其他类调用
	 */
	static Client client;

	/**
	 * 播放声音
	 */
	private AudioPlay aplay = new AudioPlay();
	javax.swing.Timer time;
	/**
	 * 启动客服端与服务器建立连接
	 */
	public void init()
	{
		try
		{
			String ip = "";
			String port = "";
			ip = JOptionPane.showInputDialog("请输入服务器IP", "");
			port = JOptionPane.showInputDialog("请输入服务器端口", 16294);
			int portInt = Integer.parseInt(port);
			socket = new Socket(ip, portInt);
			loginui = new LoginUI();
			loginui.getJFrame();
			netOut = new ObjectOutputStream(socket.getOutputStream());
			netIn = new ObjectInputStream(socket.getInputStream());
			receive();
		} catch (Exception e)
		{
			JOptionPane.showMessageDialog(null, "网络异常,连接服务端失败", "提示", 1);
			System.exit(0);
		}
	}

	/**
	 * 把对象输出网络
	 */
	public void send(Embody objMessage)
	{
		try
		{
			netOut.writeObject(objMessage);
			netOut.flush();
		} catch (Exception e)
		{
			System.out.println("网络输出异常" + e.getMessage());
		}
	}

	/**
	 * 从网络接收对象
	 */
	public void receive()
	{
		Embody objMsg = new Embody();
		while (runFlag)
		{
			try
			{
				if ((objMsg = (Embody) netIn.readObject()) != null)
				{
					chatProtocol(objMsg);
				}
			} catch (IOException e)
			{
				System.out.println("网络接收异常" + e.getMessage());
			} catch (ClassNotFoundException e)
			{
				System.out.println("找不到这个类" + e.getMessage());
			} catch (Exception e)
			{
				System.out.println("未知异常" + e.getMessage());
			}
		}
	}
	/**
	 * 响应ClientMainUI的喇叭事件 接收到系统消息后
	 */
	public void acceptOrder()
	{
		Client.hidden = false;
		this.msgShandong(hidden);
	}
	/**
	 * 信令接收的全部方法
	 */
	@SuppressWarnings("unchecked")
	public void chatProtocol(Embody objMsg) throws IOException,
			ClassNotFoundException
	{
		this.loginOrderRecieve(objMsg);
		this.regOrderRecieve(objMsg);
		this.reicievModifyUserInfo(objMsg);
		this.chatMsgRecieve(objMsg);
		this.inchatReceieve(objMsg);
		this.delFriendOrderRecieve(objMsg);
		this.addfriendfailInfoOder(objMsg);
		this.checkFriendInfoOrderRecieve(objMsg);
		this.checkfriendIPReceive(objMsg);
		if (objMsg.getOrder().equals(setting.Command.addfriendqueren)
				|| objMsg.getOrder().equals(setting.Command.addfriendaginqueren)
				|| objMsg.getOrder().equals(setting.Command.addfriendtongyi)
				|| objMsg.getOrder().equals(setting.Command.addfriendbutongyi)
				|| objMsg.getOrder().equals(setting.Command.friendliveline))
		{
			if (objMsg.getOrder().equals(setting.Command.addfriendqueren)
					|| objMsg.getOrder().equals(
							setting.Command.addfriendaginqueren)
					|| objMsg.getOrder().equals(setting.Command.addfriendtongyi)
					|| objMsg.getOrder().equals(
							setting.Command.addfriendbutongyi)
					|| objMsg.getOrder().equals(setting.Command.friendliveline))
			{
				aplay.soundPlay("/music/kesou.wav");
			}
			orderSys.add(objMsg.getOrder());// 将收来的信令保存
			hidden = true;// 收到信令就开始闪动
			this.msgShandong(hidden);
			if (!this.msgShandong(hidden))
			{
				acceptorder = true;
			}
		}
		while (Client.acceptorder)
		{
			for (int i = 0; i < orderSys.size(); i++)
			{
				ordersave = (String) orderSys.elementAt(i);
				objMsg.setOrder(ordersave);
				orderSys.removeElementAt(i);// 删除已发信令
				this.addFriendOrderRecieve(objMsg);
				this.friendlogoutOrderRecieve(objMsg);
				Client.acceptorder = false;
			}
		}
	}

	/**
	 * ClientMainUI中头像是否闪动
	 */
	public void run()
	{
		Client.mainUI.getJLabel().setVisible(false);
	}

	public boolean msgShandong(boolean hidden)
	{
		while (Client.hidden)
		{
			for (int i = 0;; i = i+5)
			{
				if (i % 2 == 0)
				{
					Client.mainUI.getJLabel().setVisible(false);
				}
				if (i % 2 == 1)
				{
					Client.mainUI.getJLabel().setVisible(true);
				}
				if (!Client.hidden)
				{
					Client.mainUI.getJLabel().setVisible(true);
					break;
				}
			}
		}
		return hidden;
	}
	/**
	 * 接收注册信令
	 */
	public void regOrderRecieve(Embody objMsg)// 注册信令
	{
		String order = objMsg.getOrder();
		if (order.equals(setting.Command.registersuccess))
		{
			JOptionPane.showMessageDialog(null, "注册成功,你的号码为"
					+ String.valueOf(((User) objMsg.getObjMessage()).getID()),
					"提示", 1);
			loginui.getJTextField().setText(
					String.valueOf(((User) objMsg.getObjMessage()).getID()));
			loginui.getJPasswordField().setText("");
			Client.userRegUI.getJFrame().setVisible(false);
			return;
		}
	}
	/**
	 * 接收登录信令和留言信令
	 */
	public void loginOrderRecieve(Embody objMsg)// 登录信令接受
	{
		String order = objMsg.getOrder();
		/**
		 * 收到登录成功信令
		 */
		if (order.equals(setting.Command.loginsuccess))// 得到登录成功的信令后还需更新好友列表
		{
			aplay.soundPlay("/music/shangxian.wav");
			Client.loginui.getJFrame().setVisible(false);// 登录成功后隐藏登录界面
			userInfo = new User();
			userInfo = (User) objMsg.getObjMessage();// 更新从服务器传来的数据
			constuser = userInfo;// 保存
			mainUI = new ClientMainUI();// 实例化主界面
			friendTree = new FriendTree();// 实例化保存好友列表的JTree
			if (userInfo.getFriend().size() == 0)// 没有好友
			{
				mainUI.setFriend(friendTree.chushi());
				mainUI.getjFrame();// 得到JFrame意味着生成了所有的组件
				mainUI.getjFrame().setVisible(true);
				mainUI.getjFrame().setTitle(String.valueOf(userInfo.getID()));// 设置标题
			}
			if (userInfo.getFriend().size() > 0)// 有好友
			{
				for (int i = 0; i < userInfo.getFriend().size(); i++)
				{
					@SuppressWarnings("unused")
					User user2 = (User) userInfo.getFriend().elementAt(i);
					// 发出查询请求好友在线状态请求
					objMsg = new Embody();
					objMsg.setSourceID(userInfo.getID());
					objMsg.setOrder(setting.Command.checkfriendstatus);
					objMsg.setObjMessage(userInfo);
					send(objMsg);
				}
			}
		}
		
		/**
		 * 收到有好友留言信令 打开留言窗口
		 */
		if (order.equals(setting.Command.yesliuyan))
		{
			aplay.soundPlay("/music/msg.wav");
			User user = new User();
			user = (User) objMsg.getObjMessage();
			if (user.getLiuyanmsg() != null)
			{
				ChatUI c2 = new ChatUI(constuser.getID(), constuser.getID());
				c2.getJFrame();
				c2.getJFrame().setVisible(true);
				c2.jFrame.setTitle("好友" + String.valueOf(user.getLiuyanid())
						+ "给你留言");
				c2.jTextArea1.append(user.getLiuyanmsg() + "\n");
				c2.jFrame.setDefaultCloseOperation(1);
			}
			objMsg.setOrder(setting.Command.updatemetofriend);
			send(objMsg);
		}
		
		/**
		 * 收到没有留言信令 发送我上线的命令给其他好友 令其更新好友列表
		 */
		if (order.equals(setting.Command.noliuyan))// 每收到留言 也需更新把我更新到对方的好友列表中
		{
			objMsg.setOrder(setting.Command.updatemetofriend);
			send(objMsg);
		}
		
		/**
		 * 收到好友在线信令
		 */
		if (order.equals(setting.Command.friendisonline))// 收到好友在线的信令
		{
			if (friendTree.online == null)// 若树还没有实例化则先实例化

⌨️ 快捷键说明

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