Initial commit - ChatRoom project
This commit is contained in:
commit
a9e340bcb3
|
|
@ -0,0 +1,170 @@
|
||||||
|
package 大作业;
|
||||||
|
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
import java.awt.GridBagLayout;
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.GridBagConstraints;
|
||||||
|
import java.awt.event.*;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.ServerSocket;
|
||||||
|
import java.net.Socket;
|
||||||
|
|
||||||
|
import javax.swing.JButton;
|
||||||
|
import javax.swing.JTextArea;
|
||||||
|
import javax.swing.JScrollPane;
|
||||||
|
|
||||||
|
public class ChatingRoom extends JFrame implements Runnable{
|
||||||
|
public JTextArea chat_Frame=new JTextArea();
|
||||||
|
private JScrollPane pane1=new JScrollPane(chat_Frame);
|
||||||
|
private JTextArea edit_Text=new JTextArea();
|
||||||
|
private JScrollPane pane2=new JScrollPane(edit_Text);
|
||||||
|
private JButton sent_Button=new JButton("发送");
|
||||||
|
private JButton return_Button=new JButton("退出聊天室");
|
||||||
|
public String text;
|
||||||
|
public String Name;
|
||||||
|
private String Ip;
|
||||||
|
private int option;
|
||||||
|
public boolean isClose;
|
||||||
|
public boolean alsent;
|
||||||
|
|
||||||
|
public ChatingRoom(String name,String IP,int option){
|
||||||
|
Name=name;
|
||||||
|
Ip=IP;
|
||||||
|
this.option=option;
|
||||||
|
isClose=false;
|
||||||
|
return_Button.setBackground(Color.red);
|
||||||
|
chat_Frame.setBorder(null);
|
||||||
|
chat_Frame.setOpaque(false);
|
||||||
|
pane1.setBorder(null);
|
||||||
|
pane1.setOpaque(false);
|
||||||
|
chat_Frame.setEditable(false);
|
||||||
|
|
||||||
|
setSize(800, 500);setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);setLocationRelativeTo(null);
|
||||||
|
setLayout(new GridBagLayout());
|
||||||
|
GridBagConstraints c=new GridBagConstraints();
|
||||||
|
c.fill=GridBagConstraints.HORIZONTAL;
|
||||||
|
c.gridx=0;c.gridy=0;
|
||||||
|
c.gridwidth=2;
|
||||||
|
c.ipady=200;
|
||||||
|
add(pane1, c);
|
||||||
|
c.gridx=0;c.gridy=1;
|
||||||
|
c.gridwidth=2;
|
||||||
|
c.weightx=3;c.weighty=3;
|
||||||
|
c.ipady=100;
|
||||||
|
add(pane2, c);
|
||||||
|
c.gridx=0;c.gridy=2;
|
||||||
|
c.gridwidth=1;
|
||||||
|
c.weightx=1;c.weighty=1;
|
||||||
|
c.ipady=10;
|
||||||
|
add(sent_Button, c);
|
||||||
|
c.gridx=1;c.gridy=2;
|
||||||
|
c.gridwidth=1;
|
||||||
|
c.weightx=1;c.weighty=1;
|
||||||
|
c.ipady=10;
|
||||||
|
add(return_Button, c);
|
||||||
|
|
||||||
|
return_Button.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e){
|
||||||
|
Log_In_frame log_In_frame=new Log_In_frame();
|
||||||
|
log_In_frame.setTitle("登录界面");
|
||||||
|
log_In_frame.setVisible(true);
|
||||||
|
isClose=true;
|
||||||
|
dispose();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if(option==2){
|
||||||
|
sent_Button.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e){
|
||||||
|
chat_Frame.append(text+'\n');
|
||||||
|
edit_Text.setText("");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}else if(option==1){
|
||||||
|
sent_Button.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e){
|
||||||
|
edit_Text.setText("");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
public void run(){
|
||||||
|
if (option==2){
|
||||||
|
setVisible(true);
|
||||||
|
final int PORT=3030;
|
||||||
|
ServerSocket s=null;
|
||||||
|
try{
|
||||||
|
s=new ServerSocket(PORT);
|
||||||
|
System.out.println("启动服务器"+'\n'+s);
|
||||||
|
Socket socket=null;
|
||||||
|
while (true) {
|
||||||
|
try {
|
||||||
|
socket=s.accept();
|
||||||
|
ServerWorker serverWorker=new ServerWorker(socket,this);
|
||||||
|
ServerManager.getServetManager().add(serverWorker);
|
||||||
|
sent_Button.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e){
|
||||||
|
text=Name+": "+edit_Text.getText();
|
||||||
|
alsent=true;
|
||||||
|
serverWorker.out.println(text);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (IOException e1) {
|
||||||
|
System.out.println(e1);
|
||||||
|
System.out.println("获取客户端Scoket异常");
|
||||||
|
}
|
||||||
|
return_Button.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e){
|
||||||
|
ServerManager.getServetManager().publishall(Name+"退出聊天室"+'\n'+"聊天室关闭");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (IOException e1) {
|
||||||
|
System.out.println(e1);
|
||||||
|
System.out.println("ServerSocket创建异常");
|
||||||
|
} finally{
|
||||||
|
try {
|
||||||
|
if(s!=null)
|
||||||
|
s.close();
|
||||||
|
} catch (IOException e1) {
|
||||||
|
System.out.println(e1);
|
||||||
|
System.out.println("ServerSocket关闭异常");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(option==1){
|
||||||
|
setVisible(true);
|
||||||
|
try {
|
||||||
|
InetAddress addr=InetAddress.getByName(Ip);
|
||||||
|
CilentSocketMultThread cilentSocketMultThread=new CilentSocketMultThread(addr, this);
|
||||||
|
sent_Button.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e){
|
||||||
|
text=Name+": "+edit_Text.getText();
|
||||||
|
alsent=true;
|
||||||
|
// edit_Text.setText("");
|
||||||
|
cilentSocketMultThread.out.println(text);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return_Button.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e){
|
||||||
|
cilentSocketMultThread.out.println(Name+"退出了聊天室");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (IOException e1) {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,77 @@
|
||||||
|
package 大作业;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
class CilentSocketMultThread extends Thread{
|
||||||
|
private Socket socket;
|
||||||
|
private BufferedReader in;
|
||||||
|
public PrintWriter out;
|
||||||
|
private ChatingRoom chatingRoom;
|
||||||
|
|
||||||
|
public CilentSocketMultThread(InetAddress addr,ChatingRoom c)throws IOException{
|
||||||
|
chatingRoom=c;
|
||||||
|
try{
|
||||||
|
socket=new Socket(addr,Sever_Socket.PORT);
|
||||||
|
System.out.println("启动客户端:"+socket);
|
||||||
|
} catch(IOException exception){
|
||||||
|
System.out.println(exception);
|
||||||
|
System.out.println("创建客户端失败");
|
||||||
|
chatingRoom.chat_Frame.append("输入了无效的IP地址或该客户端未开启");
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
|
||||||
|
out=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);
|
||||||
|
out.println(chatingRoom.Name+"加入聊天室"+'\n');
|
||||||
|
start();
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.out.println(e);
|
||||||
|
System.out.println("流异常");
|
||||||
|
try {
|
||||||
|
socket.close();
|
||||||
|
} catch (IOException exception) {
|
||||||
|
System.out.println(exception);
|
||||||
|
System.out.println("scoket关闭异常");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void run(){
|
||||||
|
try {
|
||||||
|
while (true) {
|
||||||
|
String str=in.readLine();
|
||||||
|
chatingRoom.chat_Frame.append(str+'\n');
|
||||||
|
if(chatingRoom.isClose==true)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
chatingRoom.chat_Frame.append("聊天室关闭");
|
||||||
|
System.out.println(e);
|
||||||
|
System.out.println("流异常");
|
||||||
|
try {
|
||||||
|
socket.close();
|
||||||
|
} catch (IOException e1) {
|
||||||
|
System.out.println(e1);
|
||||||
|
System.out.println("socket关闭异常");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Client_Scoket {
|
||||||
|
/*static final int MAX_THREAD=10;
|
||||||
|
|
||||||
|
public static void main(String[] args) throws IOException,InterruptedException {
|
||||||
|
InetAddress addr=InetAddress.getByName(null);
|
||||||
|
while(true){
|
||||||
|
if(CilentSocketMultThread.threadCount()<MAX_THREAD)
|
||||||
|
new CilentSocketMultThread(addr);
|
||||||
|
Thread.sleep(100);
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
pipeline {
|
||||||
|
agent any
|
||||||
|
|
||||||
|
stages {
|
||||||
|
stage('Checkout') {
|
||||||
|
steps {
|
||||||
|
git url: 'http://<服务器IP>:3000/<用户名>/ChatRoomProject.git', branch: 'master'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Build Docker Image') {
|
||||||
|
steps {
|
||||||
|
script {
|
||||||
|
docker.build("chatroom:latest", ".")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Deploy to k3s') {
|
||||||
|
steps {
|
||||||
|
sh '''
|
||||||
|
kubectl delete deployment chatroom --ignore-not-found
|
||||||
|
kubectl apply -f k8s-deployment.yaml
|
||||||
|
'''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
package 大作业;
|
||||||
|
|
||||||
|
import java.awt.GridLayout;
|
||||||
|
|
||||||
|
import javax.swing.JButton;
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
import javax.swing.JTextField;
|
||||||
|
import javax.swing.JLabel;
|
||||||
|
import java.awt.event.*;
|
||||||
|
|
||||||
|
|
||||||
|
public class Log_In_frame extends JFrame{
|
||||||
|
private JLabel username_JLabel=new JLabel("用户名");
|
||||||
|
private JLabel InetAddress_JLable=new JLabel("连接IP");
|
||||||
|
private JTextField username_JTextField=new JTextField();
|
||||||
|
private JTextField InetAddress_JTextField=new JTextField();
|
||||||
|
private JButton button1=new JButton("连接");
|
||||||
|
private JButton button2=new JButton("建立主机");
|
||||||
|
public String username;
|
||||||
|
public String IP;
|
||||||
|
public int option;
|
||||||
|
|
||||||
|
public Log_In_frame(){
|
||||||
|
option=0;
|
||||||
|
setSize(300,300);
|
||||||
|
setLocationRelativeTo(null);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
setLayout(new GridLayout(3,3));
|
||||||
|
add(username_JLabel);add(username_JTextField);
|
||||||
|
add(InetAddress_JLable);add(InetAddress_JTextField);
|
||||||
|
add(button1);add(button2);
|
||||||
|
|
||||||
|
button1.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e){
|
||||||
|
username=username_JTextField.getText();
|
||||||
|
IP=InetAddress_JTextField.getText();
|
||||||
|
option=1;
|
||||||
|
ChatingRoom chatingRoom=new ChatingRoom(username,IP,option);
|
||||||
|
chatingRoom.setTitle(username);
|
||||||
|
new Thread(chatingRoom).start();
|
||||||
|
dispose();
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
button2.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e){
|
||||||
|
username=username_JTextField.getText();
|
||||||
|
IP=InetAddress_JTextField.getText();
|
||||||
|
option=2;
|
||||||
|
ChatingRoom chatingRoom=new ChatingRoom("(主机)"+username,IP,option);
|
||||||
|
chatingRoom.setTitle("(主机)"+username);
|
||||||
|
new Thread(chatingRoom).start();
|
||||||
|
dispose();
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
package 大作业;
|
||||||
|
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
public class ServerManager {
|
||||||
|
|
||||||
|
private ServerManager() {}
|
||||||
|
private static final ServerManager sm = new ServerManager();
|
||||||
|
public static ServerManager getServetManager() {
|
||||||
|
return sm;
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector<ServerWorker> vector = new Vector<ServerWorker>();
|
||||||
|
|
||||||
|
public void add(ServerWorker cs) {
|
||||||
|
vector.add(cs);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void remove(ServerWorker cs) {
|
||||||
|
vector.remove(cs);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void publish(ServerWorker cs,String str) {
|
||||||
|
for (int i = 0; i < vector.size(); i++) {
|
||||||
|
ServerWorker serverWorker = vector.get(i);
|
||||||
|
|
||||||
|
if (!cs.equals(serverWorker)) {
|
||||||
|
serverWorker.out.println(str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void publishall(String str){
|
||||||
|
for (int i = 0; i < vector.size(); i++) {
|
||||||
|
ServerWorker serverWorker = vector.get(i);
|
||||||
|
serverWorker.out.println(str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
package 大作业;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
class ServerWorker extends Thread{
|
||||||
|
private Socket socket;
|
||||||
|
public BufferedReader in;
|
||||||
|
public PrintWriter out;
|
||||||
|
private ChatingRoom chatingRoom;
|
||||||
|
|
||||||
|
public ServerWorker(Socket s,ChatingRoom c){
|
||||||
|
chatingRoom=c;
|
||||||
|
try{
|
||||||
|
socket=s;
|
||||||
|
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
|
||||||
|
out=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);
|
||||||
|
start();
|
||||||
|
}catch(IOException exception){
|
||||||
|
System.out.println("scoket创建异常");
|
||||||
|
System.out.println(exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run(){
|
||||||
|
try{
|
||||||
|
while (true) {
|
||||||
|
String str=in.readLine();
|
||||||
|
chatingRoom.chat_Frame.append(str+'\n');
|
||||||
|
ServerManager.getServetManager().publish(this, str);
|
||||||
|
out.println(str);
|
||||||
|
if(chatingRoom.isClose==true)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
System.out.println("关闭...");
|
||||||
|
}catch(IOException exception){
|
||||||
|
ServerManager.getServetManager().remove(this);
|
||||||
|
System.out.println(exception);
|
||||||
|
System.out.println("流异常");
|
||||||
|
}finally{
|
||||||
|
try {
|
||||||
|
socket.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.out.println(e);
|
||||||
|
System.out.println("socket关闭异常");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Sever_Socket {
|
||||||
|
static final int PORT=3030;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
FROM openjdk:17-slim
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# 拷贝所有源码
|
||||||
|
COPY . /app
|
||||||
|
|
||||||
|
# 编译所有 Java 文件
|
||||||
|
RUN javac *.java
|
||||||
|
|
||||||
|
# 默认启动服务端
|
||||||
|
CMD ["java", "mainApp"]
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: chatroom
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: chatroom
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: chatroom
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: chatroom
|
||||||
|
image: chatroom:latest
|
||||||
|
ports:
|
||||||
|
- containerPort: 3030 # 服务器监听的端口
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: chatroom-service
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: chatroom
|
||||||
|
type: NodePort
|
||||||
|
ports:
|
||||||
|
- port: 3030
|
||||||
|
targetPort: 3030
|
||||||
|
nodePort: 30330 # 外部访问端口(http://服务器IP:30330)
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
package 大作业;
|
||||||
|
|
||||||
|
// import 大作业.ChatingRoom;
|
||||||
|
// import 大作业.Log_In_frame;
|
||||||
|
|
||||||
|
public class mainApp {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
Log_In_frame log_In_frame=new Log_In_frame();
|
||||||
|
log_In_frame.setTitle("登录界面");
|
||||||
|
log_In_frame.setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue