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

📄 chat.txt

📁 一个聊天室程序
💻 TXT
字号:
package socket;

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


public class Chat
extends ServerSocket {
private static ArrayList User_List = new ArrayList();
private static ArrayList Threader = new ArrayList();
private static LinkedList Message_Array = new LinkedList();
private static int Thread_Counter = 0;
private static boolean isClear = true;
protected static final int SERVER_PORT = 10000;
protected FileOutputStream LOG_FILE = new FileOutputStream("d:/connect.log", true);

public Chat() throws FileNotFoundException, IOException {
super(SERVER_PORT);
new Broadcast();

//append connection log
Calendar now = Calendar.getInstance();
String str = "[" + now.getTime().toString() +
"] Accepted a connection\015\012";
byte[] tmp = str.getBytes();
LOG_FILE.write(tmp);

try {
while (true) {
Socket socket = accept();
new CreateServerThread(socket);
}
}
finally {
close();
}
}

public static void main(String[] args) throws IOException {
new Chat();
}

//--- Broadcast
class Broadcast
extends Thread {
public Broadcast() {
start();
}

public void run() {
while (true) {
if (!isClear) {
String tmp = (String) Message_Array.getFirst();

for (int i = 0; i < Threader.size(); i++) {
CreateServerThread client = (CreateServerThread) Threader.get(i);
client.sendMessage(tmp);
}

Message_Array.removeFirst();
isClear = Message_Array.size() > 0 ? false : true;
}
}
}
}

//--- CreateServerThread
class CreateServerThread
extends Thread {
private Socket client;
private BufferedReader in;
private PrintWriter out;
private String Username;

public CreateServerThread(Socket s) throws IOException {
client = s;
in = new BufferedReader(new 无效StreamReader(client.get无效Stream()));
out = new PrintWriter(client.getOutputStream(), true);
out.println("--- Welcome to this chatroom ---");
out.println("无效 your nickname:");


start();
}

public void sendMessage(String msg) {
out.println(msg);
}

public void run() {
try {
int flag = 0;
Thread_Counter++;
String line = in.readLine();

while (!line.equals("bye")) {
if (line.equals("l")) {
out.println(listOnlineUsers());
line = in.readLine();
continue;
}

if (flag++ == 0) {
Username = line;
User_List.add(Username);
out.println(listOnlineUsers());
Threader.add(this);
pushMessage("[< " + Username + " come on in >]");
}
else {
pushMessage("<" + Username + ">" + line);

}

line = in.readLine();
}

out.println("--- See you, bye! ---");
client.close();
}
catch (IOException e) {}
finally {
try {
client.close();
}
catch (IOException e) {}

Thread_Counter--;
Threader.remove(this);
User_List.remove(Username);
pushMessage("[< " + Username + " left>]");
}
}

private String listOnlineUsers() {
String s = "-+- Online list -+-\015\012";

for (int i = 0; i < User_List.size(); i++) {
s += "[" + User_List.get(i) + "]\015\012";
}

s += "-+---------------------+-";
return s;
}

private void pushMessage(String msg) {
Message_Array.addLast(msg);
isClear = false;
}
}
}

⌨️ 快捷键说明

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