linux cpu占用率如何看
282
2022-09-06
JAVA进阶案例 TCP编程之网络聊天工具(客户端)
首先附上登录操作
把帐号密码 登录指令等封装为CommandTranser对象 然后实例化一个客户端 通过
sendData(CommandTranser msg) 方法向服务器发送数据 然后通过getData方法获得服务器返回的数据。
其中CommandTranser类在服务端已经介绍 主要变量如下
private String sender = null;// 发送者 private String receiver = null;// 接受者 private Object data = null;// 传递的数据 private boolean flag = false;// 指令的处理结果 private String cmd = null;// 服务端要做的指令 private String result = null;// 处理结果
客户端Client代码主要负责向服务端发送数据 sendData(CommandTranser msg) 和接收服务端的数据 getData()
构造方法
// 实例化时 建立连接 public Client() { try { socket = new Socket(address, port); } catch (UnknownHostException e) { // TODO Auto-generated catch block JOptionPane.showMessageDialog(null, "服务端未开启"); } catch (IOException e) { // TODO Auto-generated catch block JOptionPane.showMessageDialog(null, "服务端未开启"); } }
sendData(CommandTranser msg)
方法
// 向服务端发送数据 public void sendData(CommandTranser msg) { ObjectOutputStream oos = null; try { if (socket == null) return; oos = new ObjectOutputStream(socket.getOutputStream()); oos.writeObject(msg); } catch (UnknownHostException e1) { JOptionPane.showMessageDialog(null, "服务端未开启"); } catch (IOException e1) { JOptionPane.showMessageDialog(null, "服务端未开启"); } }
getData()方法
// 向服务端接收数据 public CommandTranser getData() { ObjectInputStream ois = null; CommandTranser msg = null; if (socket == null) return null; try { ois = new ObjectInputStream(socket.getInputStream()); msg = (CommandTranser) ois.readObject(); } catch (IOException e) { return null; } catch (ClassNotFoundException e) { return null; } if ("message".equals(msg.getCmd())) System.out.println((String) msg.getData()); return msg; }
如果服务器返回登录成功的消息 则进入好友列表界面
在登录界面 所有的好友都是我自己创建的 。陌生人知识一个摆设。。当然也可以通过服务端的数据库来加载好友列表。。以后自己慢慢更新
这两天出现的各种各样的错误 头都炸了。。
而在好友界面 有一个鼠标双击事件 和鼠标进入好友列表,离开好友列表事件
当鼠标进入好友列表 改变背景色
// 如果鼠标进入我的好友列表 背景色变色 @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub JLabel label = (JLabel) e.getSource(); label.setOpaque(true); label.setBackground(new Color(255, 240, 230)); }
修改背景色之前 一定要设置为不透明 label.setOpaque(true);
不然看不到背景色
鼠标离开好友列表
// 如果鼠标退出我的好友列表 背景色变色 @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub JLabel label = (JLabel) e.getSource(); label.setOpaque(false); label.setBackground(Color.WHITE); }
当双击好友后 出现聊天框
@Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub // 如果双击了两次 我的好友 弹出与这个好友的聊天框 if (e.getClickCount() == 2) { JLabel label = (JLabel) e.getSource(); new ChatUI(owner, label.getText(), client); } }
一旦打开聊天框 就要新建一个线程 时刻监听服务器发送的消息
thread = new ClientThread(client, chat_txt); thread.start();
//当前 对话框存在 while (isOnline) { //I/O阻塞 接收服务端发送的数据 CommandTranser msg = client.getData(); if (msg != null) { /* * 如果服务端处理数据成功 接收信息 * 否则 弹出对方不在线的对话框 */ if (msg.isFlag()) { //发送时间 Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat( "yy-MM-dd hh:mm:ss a"); String message = msg.getSender() + "说:" + (String) msg.getData() + "\t" + sdf.format(date); // 在聊天框添加收到的信息 chat_txt.append(message+"\n"); } else { JOptionPane.showMessageDialog(chat_txt, msg.getResult()); } } }
好啦 代码 就这么多。聊天过程如下
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~