⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.java~41~

📁 局域网聊天系统
💻 JAVA~41~
字号:
package com.soft.QQ;

import java.net.*;
import java.io.*;
import java.util.*;
import java.text.*;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2007</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class Server
    implements Runnable {
  DatagramPacket mail_package;
  DatagramSocket socket;
  DatagramPacket in_package;
  boolean connected = false;
  ArrayList<People> list;
  Thread thread;
  public Server() {
    thread = new Thread(this);
    thread.start();
  }

  public void run() {
    receive();
  }

  /**
   * 群聊
   * 接收客户端发来的消息并分析
   */
//  public void receive() {
//    DatagramSocket ds = null;
//    try {
//      ds = new DatagramSocket(5000);
//      byte[] buf = new byte[1024];
//      DatagramPacket dp = new DatagramPacket(buf, 1024);
//      ds.receive(dp);
//      ChatMessage cm = new Helper().unwrap(dp.getData());
//      if (cm != null && Integer.parseInt(cm.getType()) == 1) { //这个包为消息包
//        System.out.println("发送者:" + cm.getSender());
//        System.out.println("时间:" + cm.getTime());
//        System.out.println("消息内容:" + cm.getMessage());
//        String message = cm.getSender() + cm.getTime() + cm.getMessage();
//        send(cm.getSender(), cm.getMessage(), 1);
//        chatRecord(message); //保存到聊天记录
//      }
//      else if (cm != null && Integer.parseInt(cm.getType()) == 2) { //这个包为用户登入信息包
//        System.out.println("昵称:" + cm.getSender());
//        System.out.println("IP:" + cm.getIP());
//        new People(cm.getSender(), cm.getIP());
//        list.add(new People(cm.getSender(), cm.getIP())); //加入用户
//        String listtemp = null;
//        for (int i = 0; i < list.size(); i++) {
//          listtemp += list.get(i).getName() + ",";
//        }
//        sendOnlineUser(listtemp, 3);
//      }
//      else if (cm != null && Integer.parseInt(cm.getType()) == 3) { //这个包为在线列表用户信息包
//        System.out.println("用户列表:" + cm.getOnlineTable());
//      }
//    }
//    catch (Exception ex) {
//      ex.printStackTrace();
//    }
//    finally {
//      if (ds != null) {
//        ds.close();
//      }
//    }
//  }
  public void receive() {
    DatagramSocket ds = null;
    DatagramPacket dp = null;
    try {
      ds = new DatagramSocket(5000);
      byte[] buf = new byte[1024];
      dp = new DatagramPacket(buf, 1024);
    }
    catch (Exception ex) {}
    while (true) {
      if (ds == null) {
        break;
      }
      else {
        try {
          ds.receive(dp);
          ChatMessage cm = new Helper().unwrap(dp.getData());
          if (cm != null && Integer.parseInt(cm.getType()) == 1) { //这个包为消息包
            System.out.println("发送者:" + cm.getSender());
            System.out.println("时间:" + cm.getTime());
            System.out.println("消息内容:" + cm.getMessage());
            String message = cm.getSender() + cm.getTime() + cm.getMessage();
            send(cm.getSender(), cm.getMessage(), 1);
            chatRecord(message); //保存到聊天记录
          }
          else if (cm != null && Integer.parseInt(cm.getType()) == 2) { //这个包为用户登入信息包
            System.out.println("昵称:" + cm.getSender());
            System.out.println("IP:" + cm.getIP());
            new People(cm.getSender(), cm.getIP());
            list.add(new People(cm.getSender(), cm.getIP())); //加入用户
            String listtemp = null;
            for (int i = 0; i < list.size(); i++) {
              listtemp += list.get(i).getName() + ",";
            }
            sendOnlineUser(listtemp, 3);
          }
          else if (cm != null && Integer.parseInt(cm.getType()) == 3) { //这个包为在线列表用户信息包
            System.out.println("用户列表:" + cm.getOnlineTable());
          }

        }
        catch (Exception ex) {
        }
      }
    }
  }

  /**
   * 从在线列表中获得每个用户的IP,转发给所有在线用户
   */
  public void send(String sender, String input, int i) {
    DatagramSocket ds = null;
    try {
      ds = new DatagramSocket();
      byte[] buf = new Helper().wrap(sender, input, i);
      for (int a = 0; a < list.size(); a++) {
        DatagramPacket dp = new DatagramPacket(buf,
                                               buf.length,
                                               InetAddress.getByName(
            list.get(a).getIP()),
                                               6000);
        ds.send(dp);
      }
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
    finally {
      if (ds != null) {
        ds.close();
      }
    }
  }

  /**
   * 给客户端发送在线用户信息
   */
  public void sendOnlineUser(String s, int i) {
    DatagramSocket ds = null;
    try {
      ds = new DatagramSocket();
      byte[] buf = new Helper().wrapOnlineUser(s, i);
      for (int a = 0; a < list.size(); a++) {
        DatagramPacket dp = new DatagramPacket(buf,
                                               buf.length,
                                               InetAddress.getByName(
            list.get(a).getIP()),
                                               6000);
        ds.send(dp);
      }
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
    finally {
      if (ds != null) {
        ds.close();
      }
    }
  }

  /**
   * 处理私聊请求
   * @param message String
   */
  public void p2p() {

  }

  /**
   * 聊天记录
   *
   * @param mes
   */
  private void chatRecord(String message) {
    FileOutputStream fos = null;
    PrintStream ps = null;
    try {
      Date date = new Date();
      SimpleDateFormat sdf = new SimpleDateFormat("MM-dd HH:mm:ss");
      fos = new FileOutputStream("D:/ChatMessage.log", true);
      ps = new PrintStream(fos);
      ps.println(sdf.format(date) + "  " + message);
    }
    catch (Exception e) {
    }
    finally {
      try {
        ps.flush();
        ps.close();
        fos.close();
      }
      catch (Exception e) {
        e.printStackTrace();
      }
    }
  }

  public static void main(String[] args) {
    new Server();
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -