?? server.java~48~
字號(hào):
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();
}
/**
* 群聊
* 接收客戶端發(fā)來的消息并分析
*/
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) { //這個(gè)包為消息包
System.out.println("發(fā)送者:" + cm.getSender());
System.out.println("時(shí)間:" + cm.getTime());
System.out.println("消息內(nèi)容:" + cm.getMessage());
String message = cm.getSender() + cm.getTime() + cm.getMessage();
send(cm.getSender(), cm.getMessage(), 1); //轉(zhuǎn)發(fā)信息
chatRecord(message); //保存到聊天記錄
}
else if (cm != null && Integer.parseInt(cm.getType()) == 2) { //這個(gè)包為用戶登入信息包
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); //發(fā)送當(dāng)前在線列表信息,更新在線列表
}//
else if (cm != null && Integer.parseInt(cm.getType()) == 3) { //這個(gè)包為在線列表用戶信息包
System.out.println("用戶列表:" + cm.getOnlineTable());
}
}
catch (Exception ex) {
}
}
}
}
/**
* 從在線列表中獲得每個(gè)用戶的IP,轉(zhuǎn)發(fā)給所有在線用戶
*/
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();
}
}
}
/**
* 給客戶端發(fā)送在線用戶信息
*/
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();
}
}
}
/**
* 處理私聊請(qǐng)求
* @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();
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -