`
ivb411iv
  • 浏览: 15171 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

java一个学期的成果

 
阅读更多

java一个学期的成果
2012年01月13日
      还有一年就能毕业了,真正毕业。
  蛋疼的大学生活
  java局域网聊天代码:
  服务器端:
  import java.awt.*;
  import java.awt.event.*;
  import javax.swing.*;
  import java.net.*;
  import java.util.*;
  import java.io.*;
  public class Server extends JFrame {
  JMenuBar mb = new JMenuBar();
  JMenu m1 = new JMenu("文件");
  JMenu m2 = new JMenu("帮助");
  JMenuItem mi1 = new JMenuItem("连接");
  JMenuItem mi2 = new JMenuItem("退出");
  JLabel lab1 = new JLabel("用户在线列表");
  JLabel lab2 = new JLabel("消息:");
  JTextArea ta = new JTextArea(9, 30);
  java.awt.List list = new java.awt.List(9);
  JTextField tf = new JTextField(24);
  JButton b = new JButton("发送");
  JScrollPane sp = new JScrollPane();
  JPanel p1 = new JPanel();
  JPanel p2 = new JPanel();
  JPanel p3 = new JPanel();
  ServerSocket serverSocket;
  Socket socket;
  ArrayList array = new ArrayList();
  int connect;
  public Server() {
  super("聊天服务器");
  setJMenuBar(mb);
  mb.add(m1);
  mb.add(m2);
  m1.add(mi1);
  m1.addSeparator();
  m1.add(mi2);
  sp.getViewport().add(ta);
  p1.setLayout(new BorderLayout());
  p3.add(lab1);
  p1.add(p3, BorderLayout.NORTH);
  p1.add(list, BorderLayout.SOUTH);
  p2.add(lab2);
  p2.add(tf);
  p2.add(b);
  getContentPane().add(sp, BorderLayout.NORTH);
  getContentPane().add(p1, BorderLayout.CENTER);
  getContentPane().add(p2, BorderLayout.SOUTH);
  pack();
  setSize(400, 430);
  setVisible(true);
  setResizable(false);
  //监听服务器连接按钮
  mi1.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
  if (serverSocket == null) {
  try {
  serverSocket = new ServerSocket(7000);
  ta.append("系统提示:" + "                聊天服务器"
  + "                正在启动......\n");
  } catch (IOException ex) {
  ta.append("系统提示:" + "                聊天服务器"
  + "                启动失败!\n");
  }
  } else {
  ta.append("系统消息:" + "                聊天服务器"
  + "                已经启动......\n");
  }
  // 启动监听客户端连接线程
  Thread t = new Watch();
  t.start();
  }
  });
  mi2.addActionListener(new ServerListener());
  //菜单中的退出按钮事件监听
  b.addActionListener(new ServerListener());
  addWindowListener(new WindowAdapter() {
  public void windowClosing(WindowEvent e) {
  closeAll();
  System.exit(0);
  }
  });
  }
  class Watch extends Thread {
  public void run() {
  while (true) {
  if (array.size() socket = serverSocket.accept();
  } catch (IOException ex) {
  ta.append("系统消息:                " + ex + "\n");
  }
  // 创建客户端线程,一个线程对应一个客户端
  Client c = new Client(socket);
  array.add(c);
  c.start();
  } else {
  ta.append("系统消息:" + "                聊天服务器"
  + "                已经超过最大连接数,请待会连接!\n");
  }
  }
  }
  }
  class Client extends Thread {
  String name;
  String ip;
  String ipAddress;
  Socket socket;
  BufferedReader br;
  PrintStream ps;
  public Client(Socket s) {
  try {
  socket = s;
  br = new BufferedReader(new InputStreamReader(s
  .getInputStream()));
  ps = new PrintStream(s.getOutputStream());
  } catch (IOException ex) {
  ta.append("系统消息:                " + ex + "\n");
  }
  }
  public void run() {
  String info;
  try {
  while (true) {
  info = br.readLine();
  if (info == null)
  break;
  StringTokenizer st = new StringTokenizer(info, ":");
  String keyword = st.nextToken();
  // 处理客户端传来的信息
  if (keyword.equals("CONNECT")) {
  name = st.nextToken();
  ip = st.nextToken();
  ipAddress = ip.substring(ip.indexOf("/") + 1);
  ta.append("系统消息:                " + name + "/"
  + ipAddress + "                已经连接\n");
  list.add(name + "                    " + ip
  + "                    已经登录");
  notifyChatRoom();
  } else if (keyword.equals("MSG")) {
  String broadcast = st.nextToken();
  StringBuffer message = new StringBuffer("MSG:"
  + broadcast);
  message.append(st.nextToken("\0"));
  if (broadcast.equals("BROAD")) {
  sendToClients(message);
  } else {
  sendToClient(message, broadcast);
  }
  } else if (keyword.equals("QUIT")) {
  disConnect(this);
  list.removeAll();
  for (int i = 0; i  0) {
  try {
  for (int i = 0; i Socket socket;
  PrintStream ps;
  String name;
  String ip;
  public Client() {
  super("聊天室");
  p1.add(lab3);
  p1.add(tf3);
  p1.add(lab1);
  p1.add(tf1);
  p1.add(b1);
  p1.add(b2);
  p2.add(lab2);
  p2.add(tf2);
  p2.add(b3);
  p3.setLayout(new BorderLayout());
  p3.add(list, BorderLayout.NORTH);
  p3.add(rb1, BorderLayout.CENTER);
  p3.add(rb2, BorderLayout.SOUTH);
  bg.add(rb1);
  bg.add(rb2);
  sp.getViewport().add(ta);
  p4.add(p3);
  p4.add(sp);
  getContentPane().add(p1, BorderLayout.NORTH);
  getContentPane().add(p4, BorderLayout.CENTER);
  getContentPane().add(p2, BorderLayout.SOUTH);
  pack();
  setLocation(300,300);
  setSize(460, 330);
  setVisible(true);
  setResizable(false);
  b2.setEnabled(false);
  b1.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
  try {
  if (tf3.getText().compareTo("")==0 || tf1.getText().compareTo("")==0) {
  JOptionPane.showMessageDialog(null,"服务器IP或着用户名不能为空,请输入您所要连接的服务器IP或者您的用户名","错误", JOptionPane.PLAIN_MESSAGE);
  } else {
  socket = new Socket(tf3.getText(), 7000);
  if (socket != null) {
  StringBuffer msg = new StringBuffer("CONNECT:");
  name = tf1.getText();
  ip = tf3.getText();
  msg.append(name + ":" + ip);
  ps = new PrintStream(socket.getOutputStream());
  ps.println(msg);
  ps.flush();
  ta.setText("");
  ta.append(name + "登录成功!" + "\n");
  b1.setEnabled(false);
  b2.setEnabled(true);
  // 启动客户端线程,监听服务器端传来的信息
  Thread t = new ClientListener(socket);
  t.start();
  }
  }
  } catch (Exception ex) {
  JOptionPane.showMessageDialog(null,"无法找到服务器,请确认服务器IP和服务器是否开启","错误", JOptionPane.PLAIN_MESSAGE);
  ta.append("无法找到服务器,登陆失败!");
  //ta.append("Error: " + ex + "\n");
  }
  }
  });
  b2.addActionListener(new ButtonListener());
  b3.addActionListener(new ButtonListener());
  //tf2.addActionListener(new TFListener());
  addWindowListener(new WindowAdapter() {
  public void windowClosing(WindowEvent e) {
  if (socket != null) {
  ps.println("QUIT:" + name);
  ps.flush();
  closeSocket();
  }
  System.exit(0);
  }
  });
  }
  class ClientListener extends Thread {
  Socket socket;
  BufferedReader br;
  PrintStream ps;
  String message;
  public ClientListener(Socket s) {
  try {
  socket = s;
  br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  ps = new PrintStream(socket.getOutputStream());
  } catch (IOException ex) {
  ta.append("Error: " + ex + "\n");
  }
  }
  public void run() {
  while (true) {
  try {
  message = br.readLine();
  if (message == null)
  break;
  } catch (IOException ex) {
  ta.append("Error-debug: " + ex + "\n");
  }
  StringTokenizer st = new StringTokenizer(message, ":");
  String keyword = st.nextToken();
  // 服务器端传来各种信息的处理
  if (keyword.equals("PEOPLE")) {
  list.removeAll();
  while (st.hasMoreTokens()) {
  String user = st.nextToken();
  list.add(user);
  }
  } else if (keyword.equals("MSG")) {
  String broadcast = st.nextToken();
  String user = st.nextToken();
  StringBuffer sb = new StringBuffer(user
  + st.nextToken("\0"));
  ta.append(sb + "\n");
  } else if (keyword.equals("QUIT")) {
  String who = st.nextToken();
  if (who.equals("Server")) {
  closeSocket();
  ta.append("聊天服务器已经关闭!" + "\n");
  list.removeAll();
  b2.setEnabled(false);
  } else {
  closeSocket();
  b1.setEnabled(true);
  b2.setEnabled(false);
  list.removeAll();
  ta.append(name + "退出了聊天室!" + "\n");
  }
  break;
  }
  }
  }
  }
  public void closeSocket() {
  if (socket != null) {
  try {
  socket.close();
  } catch (IOException ex) {
  ta.append("Error: " + ex + "\n");
  }
  }
  }
  class ButtonListener implements ActionListener {
  public void actionPerformed(ActionEvent e) {
  if (e.getActionCommand().equals("退出")) {
  ps.println("QUIT:" + name);
  ps.flush();
  } else if (e.getActionCommand().equals("发送")) {
  StringBuffer msg = new StringBuffer("MSG:");
  String info = name + ":" + tf2.getText();
  if (rb1.isSelected()) {
  msg.append("BROAD:" + info);
  } else {
  msg.append(list.getSelectedItem() + ":" + info);
  }
  ps.println(msg);
  ps.flush();
  tf2.setText("");
  }
  }
  }
  /* class TFListener implements ActionListener {
  public void actionPerformed(ActionEvent e) {
  StringBuffer msg = new StringBuffer("MSG:");
  String info = name + ":" + tf2.getText();
  }
  }
  */
  public static void main(String[] args) {
  Client app = new Client();
  }
  }
分享到:
评论

相关推荐

    BelajarJava:UIN MALIKI Malang的Java模块中的Java代码学习成果的集合

    此回购协议不仅用于复制和粘贴,还用于学习媒体,如果仅用于复制和粘贴,我的Wallahi对此并不满意:) 学习Java UIN MALIKI Malang的Java模块中的...第一学期=> 作者 穆罕默德·梅加纳塔(Muhammad Meganata)Adam S

    Java 多人聊天系统

    这是我学了一学期的Java的小小成果,主要是简单易懂的,如果适合大家的就看看吧

    基于java开发的学生请假管理系统(属于本人大二上学期课题的成果)

    前后端分离开发是目前web开发的主流趋势,通过前后... 本课题使用web与servlet为基石,从Mysql中提取数据,构建一个学生请假管理系统平台。 开发工具:IDEA、Mysql、Navicat等 对于代码的注释非常详细,新手也可以看懂

    JAVA 2实用教程第4版 实验代码和实验报告

    JAVA 2实用教程第4版 实验代码和实验报告(含代码截图解释课后练习等), 少部分章节没有,本人一学期以来的成果 保证认真完成不保证正确性 仅供参考 转载请注明出处谢谢

    JAVA数据库课程设计.docx

     一、课程设计目的 通过这次的设计,主要是做出一个小型的管理系统,来加强对JV所学学问的稳固和融会贯穿,可以说是对一个学期所学学问的一个小结,加深对JV数据库的理解。 二、需求分析 功能需求分析: 该系统...

    Java资源 用于javaweb作业和实验的提交,与考核

    用于展示一学期的学习成果 用于javaweb作业和实验的提交,与考核. 用于展示一学期的学习成果 用于javaweb作业和实验的提交,与考核. 用于展示一学期的学习成果 用于javaweb作业和实验的提交,与考核

    word源码java-FeiHuaLing-Flask:我的第一个Flask应用程序飞花灵

    本学期伊始我用Java语言写了Android版本的飞花令,第一次写的报告也非常荣幸地成为了模范作业,但几经折腾对Andriod平台有些失望,各种莫名其妙的错误让人很非常头疼,项目也是删了改改了删,于是在做完GPS-Alarm后...

    JAVA实习报告(4).doc

    一个月 同组学生姓名: 实习地点: 实习日期: 成 绩: 批改教师: 批改时间: Java Web 实习 ——安博实习报告 前言 昆山安博外包服务产业园区,作为安博教育集团业务的重要组成部分,承担着安博内部 员工、安博...

    java课程设计---英汉电子词典.doc

    ………………………………………………4 设计体会……………………………………………5 一、设计分析 英汉电子词典作为一个常用的学习工具,系统应该能完成词典的功能。该系统主要用于 实现英汉互译和编辑词典库中的...

    java餐饮管理系统源码-Team-Fruity-Tutti:团队-成果-每个人

    团队的一个项目 Fruity Tutti 团队选择了“灯塔”项目来进行整个学期的工作。 该信标旨在成为解决许多公民数字文盲的技术解决方案。 #THE 问题您如何向计算机和互联网技能有限的公民提供新故事,并使他们能够以一种...

    8086汇编语言-混合四则计算器

    现在,小弟现在献上自己学习一个月的成果。 一个DOS界面的支持连续加、减、除、乘的混合计算器。它带两位定点小数及美化界面。完全由最基础的低级汇编编写。 附上小弟59页的对代码的详细注释说明及完整源代码。 希望...

    java实现学生管理系统源码-androbot:机器人

    第一个演示文稿是 10 - 12 分钟的进度报告。 进度报告定于 6 月 3 日星期一下午 5:00 至下午 6:50 在 WCC 310 举行。第二次演示是针对演示日,即 6 月 10 日星期一和 6 月 11 日星期二(如果需要)从下午 5:30 - ...

    WEBD4201-暗示

    WEBD4201-暗示该存储库包含达勒姆学院Web开发-企业(WEBD 4201... 下一个实验室/可交付成果是:可交付成果3-JSP网页已完成的交付项目包括: 可交付成果#1-Java / OOP评论交付品2-JDBC / Web安全术语测试1-Java / JDBC

    基于java的学生管理系统设计与实现.zip

    压缩包里面有:整个项目系统、数据库、成果书(论文) 学生管理系统: 管理人员所能使用的功能主要有:教师管理、学生管理、课程管理、教室管理、课学期管理等模块。 老师使用主要功能:课程表管理、课表查看等模块...

    OOP-2020-2021:OOP第二学期的讲座,实验,教程和代码示例-使用Java,Visual Studio Code,Processing,Minim和git进行创意编码

    资源联系讲师电子邮件: 推特: 评估第11周实验室测试20% 第12周的作业提交-30% 年终考试-50%往年实验室测试 第6周-星图ArrayList,类,CSV文件实验室学习成果上课构造函数和访问器方法使用一个ArrayList 发展...

    java实现学生管理系统源码-ECE544-Final_Project:安卓控制车

    第一个演示文稿是 10 - 12 分钟的进度报告。 进度报告定于 6 月 3 日星期一下午 5:00 至下午 6:50 在 WCC 310 举行。第二次演示是针对演示日,即 6 月 10 日星期一和 6 月 11 日星期二(如果需要)从下午 5:30 - ...

    java实现学生管理系统源码-AndroBot-A-path-mapping-Robot:AndroBot-A-path-mapping-Ro

    第一个演示文稿是 10 - 12 分钟的进度报告。 进度报告定于 6 月 3 日星期一下午 5:00 至下午 6:50 在 WCC 310 举行。第二次演示是针对演示日,即 6 月 10 日星期一和 6 月 11 日星期二(如果需要)从下午 5:30 - ...

    高等学校教材管理系统的设计与实现_

    但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司.NET windows网络框架的主角。  C#是一种可视化的、面对对象和事件驱动方式的结构化高级程序设计,可...

    CS1699-Deliverable3:皮特 CS 1699 - 可交付成果 #3

    您应该基本上涵盖项目的功能子集,并在“测试问题”部分注意如果这是一个专业产品,您还需要添加哪些其他方面以进行全面测试。 测试和代码应位于 GitHub 或其他可公开访问的存储库上。 您可以为此交付物选择合作...

    毕业设计:asp+ACCESS网上选课系统(源代码)

    根据功能的不同可以将本系统划分为四个主模块,五个子模块 身份验证:通过登录才可进入选课系统,登录信息提交后检验登录者的身份是否合法,合法,则转入对应的操作界面。在本系统中,只有三种身份:学生、老师、...

Global site tag (gtag.js) - Google Analytics