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();
  }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值