java实验报告第五次

上传人:博****1 文档编号:486839900 上传时间:2023-06-28 格式:DOC 页数:7 大小:131KB
返回 下载 相关 举报
java实验报告第五次_第1页
第1页 / 共7页
java实验报告第五次_第2页
第2页 / 共7页
java实验报告第五次_第3页
第3页 / 共7页
java实验报告第五次_第4页
第4页 / 共7页
java实验报告第五次_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《java实验报告第五次》由会员分享,可在线阅读,更多相关《java实验报告第五次(7页珍藏版)》请在金锄头文库上搜索。

1、题目: 简易聊天 班级学号: 姓名: 一、 实验内容实现简易两个客户端的聊天。二、实验步骤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

2、 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

3、 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 s

4、endText.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.equal

5、s(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 reade

6、r = 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) / 首先判

7、断是否已经在线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.flu

8、sh(); 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(所有人) sendMessag

9、eToAllButSelf(info + rn, infos1);else if(info.startsWith(EXIT)/移除要下线的人online.remove(infos1);/给还在线上的用户发送好友下线信息将树的刷新操作交给客户端了,由于jtree不熟,移除指定名的结点相对麻烦/* 第二个参数指的是给所有人发送,但是除去自己,现在没有自己,我们就传原因是由于map 中从未放置过 */sendMessageToAllButSelf(getonlineName() + rn, );sendMessageToAllButSelf(SYSTEM:EXIT: + infos1 + rn, )

10、; 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

11、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;pub

12、lic 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

13、.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.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号