📄 server.java
字号:
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;
ArrayList<People> list;
Thread thread;
public Server() {
thread = new Thread(this);
thread.start();
}
public void run() {
receive();
}
/**
* 群聊
* 接收客户端发来的消息并分析
*/
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());
chatRecord(cm.getSender()+"("+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 {
for (int a = 0; a < list.size(); a++) {
ds = new DatagramSocket(4000+a);
byte[] buf = new Helper().wrap(sender, input, i);
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 {
for (int a = 0; a < list.size(); a++) {
ds = new DatagramSocket(3000+a);
byte[] buf = new Helper().wrapOnlineUser(s, i);
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 + -