📄 chatserver.java
字号:
//ChatServer.java
import java.io.*;
import java.net.*;
import java.util.*;
public class ChatServer{
public static final int PORT = 8080;
public static ArrayList socketList = new ArrayList();
public static ArrayList OnLineUserName = new ArrayList();
public static void main(String args[])throws IOException{
ServerSocket server = new ServerSocket(PORT);
System.out.println("服务器已经启动了(Server Started.....)");
System.out.println("本机IP地址为:" + InetAddress.getLocalHost().getHostAddress() + " "+"端口为:"+ PORT);
try{
try{
while(true){
Socket socket = server.accept();
System.out.println("有人上线了(have people OnLine)");
new ChatClientThread(socket);
}
}catch(Exception ex){ }
}finally{
server.close();
}
}
}
class ChatClientThread extends Thread{
Socket socket;
BufferedReader input;
PrintWriter output;
public ChatClientThread(Socket s){
socket = s;
ChatServer.socketList.add(socket);
try{
input = new BufferedReader(new InputStreamReader(socket.getInputStream()));//从客户端读入消息
output = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));//向客户端发送消息
}catch(IOException e){
}
start();
}
public synchronized void run(){
try{
String name;
/*for(int i = 0; i < ChatServer.socketList.size(); i++){
PrintWriter allLoginUserName = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
allLoginUserName.println(ChatServer.OnLineUserName.get(i));
}*/
name = input.readLine();
System.out.println(name);
for(int i = 0;i < ChatServer.OnLineUserName.size();i++){
output.println("^userName^" + "\t" + ChatServer.OnLineUserName.get(i));
output.flush();
}
ChatServer.OnLineUserName.add(name);
for(int i = 0;i < ChatServer.socketList.size();i++){
PrintWriter output = new PrintWriter(new BufferedWriter(new OutputStreamWriter(((Socket)ChatServer.socketList.get(i)).getOutputStream())),true);
output.println("^userName^" + "\t" + name);
output.flush();
}
/* if(name.equals("Login")){
String LoginUserName = input.readLine();
ChatServer.OnLineUserName.add(name);
System.out.println(name);
ChatServer.socketList.add(socket);
System.out.println(socket);
for(int i = 0;i< ChatServer.socketList.size();i++){
PrintWriter NewLoginUserName = new PrintWriter(new BufferedWriter(new OutputStreamWriter(((Socket)ChatServer.socketList.get(i)).getOutputStream())),true);
NewLoginUserName.println(name);
}
}*/
new ChatServerThread(socket);
}catch(Exception e){ }
}
}
class ChatServerThread extends Thread{
private Socket socket;
private BufferedReader input;
private PrintWriter output;
public ChatServerThread (Socket s)throws IOException{
socket = s;
input = new BufferedReader(new InputStreamReader(socket.getInputStream()));//从客户端读入消息
output = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);//发送消息到客户端
start();
}
public synchronized void run(){
String stringClient;
try{//
stringClient = input.readLine();
if(stringClient.equals("^离开^")){
for(int i = 0;i<ChatServer.socketList.size();i++){
if((Socket)ChatServer.socketList.get(i)== socket){
for(int j = 0;j<ChatServer.socketList.size();j++){
if((Socket)ChatServer.socketList.get(j) == socket)
break;
PrintWriter stringClientOff = new PrintWriter(new BufferedWriter(new OutputStreamWriter(((Socket)ChatServer.socketList.get(j)).getOutputStream())),true);
stringClientOff.println("离开的用户名");
stringClientOff.println(ChatServer.OnLineUserName.get(i));
System.out.println("用户已经不在"+ChatServer.OnLineUserName.get(i));
}
}
ChatServer.socketList.remove(i);
ChatServer.OnLineUserName.remove(i);
socket.close();
}
}
else{
for(int i = 0;i < ChatServer.socketList.size();i++){
// if((Socket)ChatServer.socketList.get(i) == socket)
// break;
PrintWriter output = new PrintWriter(new BufferedWriter(new OutputStreamWriter(((Socket)ChatServer.socketList.get(i)).getOutputStream())),true);
output.println(stringClient);
output.flush();
}
}
}catch(Exception e){ }//
try{
stringClient = input.readLine();
while(true){
if(stringClient.length()!=0){
for(int i = 0;i<ChatServer.socketList.size();i++){
PrintWriter output = new PrintWriter(new BufferedWriter(new OutputStreamWriter(((Socket)ChatServer.socketList.get(i)).getOutputStream())),true);
output.println(stringClient);
output.flush();
}
System.out.println("Echoing :" + stringClient);
}
stringClient = input.readLine();
}
}catch(IOException ex){}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -