资源预览内容
第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
亲,该文档总共7页全部预览完了,如果喜欢就下载吧!
资源描述
题目: 简易聊天 班级学号: 姓名: 一、 实验内容实现简易两个客户端的聊天。二、实验步骤1、创建服务器2、创建客户端,并与客户端建立连接。3、实现两个客户端之间进行简单的聊天。三、源程序部分源程序服务器端:public class Server / 保存在线人的套接字和名字HashMap online = new HashMap();private UserDao dao = new UserDao();public void server() try / 服务器端ServerSocket server = new ServerSocket(2222);while (true) Socket socket = server.accept();new QQReader(socket).start(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();class QQReader extends Thread private Socket socket;public QQReader(Socket socket) this.socket = socket;/ 判断某人是否在线,返回true表示不在线public boolean isOnline(String name) return online.get(name) = null ? true : false;public String getonlineName() Set onlineName = online.keySet();Iterator it = onlineName.iterator();StringBuffer sf = new StringBuffer(ONLINELIST:);while (it.hasNext() sf.append(it.next() + :);/ ONLINE:zhangsan1:zhangsan2String sendText = sf.toString();return sendText.substring(0, sendText.length() - 1);public void sendMessageToAllButSelf(String info, String self) try / 给所有已经上线的人发送好友在线信息Collection onlineSocket = online.values();Iterator iterator = onlineSocket.iterator();while (iterator.hasNext() Socket temp_socket = iterator.next();if (!temp_socket.equals(online.get(self) BufferedWriter temp_writer = new BufferedWriter(new OutputStreamWriter(temp_socket.getOutputStream();/ temp_writer.write(ONLINE: + infos1 + rn);temp_writer.write(info);temp_writer.flush(); catch (IOException e) e.printStackTrace();Overridepublic void run() try BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream();BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream();String info = ;while (info = reader.readLine() != null) String infos = info.split(:);if (info.startsWith(LOGIN) if (dao.select(infos1) / 首先判断是否已经在线if (isOnline(infos1) online.put(infos1, socket);writer.write(LOGIN:OKrn);writer.flush();sendMessageToAllButSelf(SYSTEM:ONLINE: + infos1+ rn, infos1);writer.write(getonlineName() + rn);writer.flush(); else writer.write(LOGIN:RELOGrn);writer.flush(); else writer.write(LOGIN:REFUSErn);writer.flush(); else if(info.startsWith(CHAT)Socket temp_socket = online.get(infos2);if(temp_socket != null)BufferedWriter temp_writer = new BufferedWriter(new OutputStreamWriter(temp_socket.getOutputStream();/原样转发 不做处理 自己加上rntemp_writer.write(info+rn);temp_writer.flush();elseif (infos2.equals(所有人) sendMessageToAllButSelf(info + rn, infos1);else if(info.startsWith(EXIT)/移除要下线的人online.remove(infos1);/给还在线上的用户发送好友下线信息将树的刷新操作交给客户端了,由于jtree不熟,移除指定名的结点相对麻烦/* 第二个参数指的是给所有人发送,但是除去自己,现在没有自己,我们就传原因是由于map 中从未放置过 */sendMessageToAllButSelf(getonlineName() + rn, );sendMessageToAllButSelf(SYSTEM:EXIT: + infos1 + rn, ); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();public static void main(String args) new Server().server();客户端:public class Chat private String name;private Socket socket;private JFrame frame;private JTextArea area;private JScrollPane pane;private DefaultMutableTreeNode root;/根结点private DefaultTreeModel model;/树模型private JTree tree;private JLabel lbl;private JTextField field;/保存对方的姓名private JTextField txt;/要发送的内容private JButton btnSet;/发送按钮private JPanel panelSouth;public Chat(Socket socket,String name)this.socket = socket;this.name = name;private Reader reader;public void init()frame = new JFrame();area = new JTextArea(25,30);area.setLineWrap(true);pane = new JScrollPane(area,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);root = new DefaultMutableTreeNode(我的好友);model = new DefaultTreeModel(root);tree = new JTree(model);model.insertNodeInto(new DefaultMutableTreeNode(this.name), root, 0);panelSouth = new JPanel();lbl = new JLabel(this.name + 对:);field = new JTextField(15);txt = new JTextField(25);btnSet = new JButton(发送);frame.add(pane);frame.add(tree,BorderLayout.EAST);panelSouth.add(lbl);panelSouth.add(field);panelSouth.add(txt);panelSouth.add(btnSet);frame.add(panelSouth,BorderLayout.SOUTH);frame.
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号