📄 server.java
字号:
import java.io.*;
import java.net.*;
import java.util.Vector;
public class Server {
static Vector socketVector=new Vector();
static Vector UserList=new Vector();
public static void initAuthFile() throws Exception {
String ups[] = new String[] {"hackgun", "1234", "Wakao", "1234","lala0","1234"};
DataOutputStream dos = new DataOutputStream(new FileOutputStream(ClientThread.authFile));
for (int i = 0; i < ups.length; i++) {
dos.writeUTF(ups[i]);
}
dos.close();
}
public static void main(String[] args) {
ServerSocket serverSocket;
try {
initAuthFile();
serverSocket = new ServerSocket(10002);
while (true) {
Socket clientSocket = serverSocket.accept();
ClientThread ct = new ClientThread(clientSocket);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
class ClientThread extends Thread {
static String logFile = "log.txt";
static String authFile = "auth.dat";
Vector sline=new Vector();
String user;
Socket socket;
BufferedReader sin;
PrintWriter sout;
PrintWriter log;
public ClientThread(Socket client) {
socket = client;
try {
sin = new BufferedReader(new InputStreamReader(client
.getInputStream()));
sout = new PrintWriter(new OutputStreamWriter(client
.getOutputStream()));
log = new PrintWriter(new FileWriter(new File(logFile), true));
} catch (IOException e) {
e.printStackTrace();
System.out.println("connection break");
close();
return;
}
this.start();
}
public void close() {
try {
sin.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
sout.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
log.close();
} catch (Exception e) {
e.printStackTrace();
}
try {
Server.socketVector.removeElement(socket);
Server.UserList.removeElement(user);
sendmsgtoall("/RefreshUserList");
sendmsgtoall("/lessuser");
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public synchronized void sendmsgtoall(String msg){
PrintWriter sout_2;
Socket socket_2;
try{
if (msg.equals("/RefreshUserList")){
for (int i = 0; i < Server.socketVector.size(); i++){
socket_2 = ((Socket) Server.socketVector.elementAt(i));
sout_2 = new PrintWriter(new OutputStreamWriter(socket_2.getOutputStream()));
sout_2.println("/RefreshUserList");
for (int i2 = 0; i2 < Server.UserList.size(); i2++){
sout_2.println(Server.UserList.elementAt(i2));
}
sout_2.println("SendUserList/");
sout_2.flush();
}
}
else if(msg.equals("/TALK")){
for (int i = 0; i < Server.socketVector.size(); i++){
socket_2 = ((Socket) Server.socketVector.elementAt(i));
sout_2 = new PrintWriter(new OutputStreamWriter(socket_2.getOutputStream()));
sout_2.println("/TALK");
// sout_2.println(user+"˵:");
for (int i2 = 0; i2 < sline.size(); i2++){
sout_2.println((String) sline.elementAt(i2));
}
sout_2.flush();
}
}
else if(msg.equals("/lessuser")){
for (int i = 0; i < Server.socketVector.size(); i++){
socket_2 = ((Socket) Server.socketVector.elementAt(i));
sout_2 = new PrintWriter(new OutputStreamWriter(socket_2.getOutputStream()));
sout_2.println("/lessuser");
sout_2.println(user);
sout_2.flush();
}
}
else if(msg.equals("/adduser")){
for (int i = 0; i < Server.socketVector.size(); i++){
socket_2 = ((Socket) Server.socketVector.elementAt(i));
sout_2 = new PrintWriter(new OutputStreamWriter(socket_2.getOutputStream()));
sout_2.println("/adduser");
sout_2.println(user);
sout_2.flush();
}
}
}catch (IOException e) {
//e.printStackTrace();
System.out.println("connection break");
close();
return;
}
}
public void run() {
String line, pass;
PrintWriter sout_2;
Socket socket_2;
// login auth
try {
user = sin.readLine();
pass = sin.readLine();
checkLogin(user, pass);
} catch (IOException e) {
//e.printStackTrace();
System.out.println("connection break");
close();
return;
} catch (AuthException e) {
//e.printStackTrace();
System.out.println("auth fail");
close();
return;
}
sout.println("login succ");
sout.flush();
Server.socketVector.addElement(socket);
Server.UserList.addElement(user);
sendmsgtoall("/RefreshUserList");
sendmsgtoall("/adduser");
try {
while (true) {
line = sin.readLine();
if (line.equals( "/logout")) break;
// if (line.equals("/GetUserList")){
// sout.println("/RefreshUserList");
// for (int i = 0; i < Server.UserList.size(); i++){
// sout.println(Server.UserList.elementAt(i));
// }
// sout.println("SendUserList/");
// sout.flush();
// }
if (line.equals("/TALK"))
{
//
while (line.equals("TALK/") == false){
line = sin.readLine();
sline.addElement(line);
}
sendmsgtoall("/TALK");
sline.clear();
}
log.println(line);
// System.out.println("recv from "
// + socket.getRemoteSocketAddress() + ":" + line);
}
} catch (IOException e) {
//e.printStackTrace();
System.out.println("connection break");
close();
return;
}
System.out.println("close conn");
close();
}
public void checkLogin(String user, String pass) throws AuthException {
DataInputStream din = null;
try {
din = new DataInputStream(new FileInputStream(authFile));
while (din.available() != 0) {
String u = din.readUTF();
String p = din.readUTF();
if (user.equals(u) && pass.equals(p)) {
System.out.println(user + " login succ");
return;
}
if (din.available() == 0) {
throw new AuthException("login fail");
}
}
} catch (Exception e) {
System.out.println(user + " login fail");
throw new AuthException("login fail");
} finally {
try {
din.close();
} catch (Exception e) {
//e.printStackTrace();
}
}
}
}
class AuthException extends Exception {
String mess;
public AuthException(String mess) {
this.mess = mess;
}
public String toString() {
return mess;
}
public String getMessage() {
return mess;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -