package com.lt.server;
import com.lt.util.SwingTester;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Iterator;
public class ServerChat extends JFrame {
private static final int PORT = 7608;
private JTextArea serverTa = new JTextArea();
private JScrollPane sp = new JScrollPane(serverTa);
private JPanel btntool = new JPanel();
// private JButton startBtn = new JButton("启动");
private JButton stopbtn = new JButton("停止");
private ArrayList<ClientConn> ccList = new ArrayList<>();
private ServerSocket ss = null;
private boolean isStart = false;
public ServerChat() {
this.setTitle("服务器端");
this.add(sp, BorderLayout.CENTER);
// this.btntool.add(startBtn);
ImageIcon arrowIcon = null;
java.net.URL imgURL = SwingTester.class.getResource("chat.jpg");
System.out.println(imgURL);
arrowIcon = new ImageIcon(imgURL);
this.setIconImage(arrowIcon.getImage());
this.btntool.add(stopbtn);
this.add(btntool, BorderLayout.SOUTH);
this.setBounds(0, 0, 500, 500);
stopbtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
isStart = false;
try {
if (ss != null) {
ss.close();
}
System.out.println("服务器停止!\n");
serverTa.append("服务器断开!\n");
System.exit(0);
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
});
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
isStart = false;
try {
if (ss != null) {
ss.close();
}
System.out.println("服务器停止!\n");
serverTa.append("服务器断开!\n");
System.exit(0);
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
});
serverTa.setEditable(false);
this.setVisible(true);
startServer();
}
//服务器启动
public void startServer(){
try {
try {
ss = new ServerSocket(PORT);
isStart = true;
} catch (IOException e) {
e.printStackTrace();
}
//可以接受多个客户端的连接
while (isStart) {
Socket s = ss.accept();
ccList.add(new ClientConn(s));
System.out.println("一个客户端连接服务区:" + s.getInetAddress() + "/" + s.getPort());
serverTa.append("一个客户端连接服务区:" + s.getInetAddress() + "/" + s.getPort() + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
// receiveStr();
serverTa.append("服务器启动成功!\n");
}
/**
* //服务器接受数据
public void receiveStr() {
try {
dis = new DataInputStream(s.getInputStream());
String str = dis.readUTF();
System.out.println(str);
serverTa.append(str);
} catch (IOException e) {
e.printStackTrace();
}
}
*/
//这个对象是属于服务器端的一个连接对象
class ClientConn implements Runnable{
Socket s = null;
public ClientConn(Socket s) {
this.s = s;
(new Thread(this)).start();
}
//同时接收多个客户端的信息 -- 多线程接收数据
@Override
public void run() {
try {
DataInputStream dis = new DataInputStream(s.getInputStream());
while (isStart) {
String str = dis.readUTF();
System.out.println(s.getInetAddress() + "/" + s.getPort() +"说: " + str);
serverTa.append(s.getInetAddress() + "/" + s.getPort() +"说: " + str + "\n");
String strSend = s.getInetAddress() + "/" + s.getPort() +"说: " + str + "\n";
//遍历ccList,调用send方法
Iterator<ClientConn> it = ccList.iterator();
while (it.hasNext()) {
ClientConn o = it.next();
o.send(strSend);
}
}
} catch (SocketException e) {
System.out.println("一个客户端下线了:" + s.getInetAddress() + "/" + s.getPort());
serverTa.append("一个客户端下线了:" + s.getInetAddress() + "/" + s.getPort() + "\n");
}
catch (IOException e) {
System.out.println("服务器中断了!");
e.printStackTrace();
}
}
//给每个连接对象发送数据
public void send(String str) {
try {
DataOutputStream dos = new DataOutputStream(this.s.getOutputStream());
dos.writeUTF(str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
ServerChat sc = new ServerChat();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
chat.zip (49个子文件)
chat
src
lib
mysql-connector-java-8.0.16.jar 2.19MB
poi-scratchpad-3.15-sources.jar 1021KB
images
chat.jpg 36KB
com
lt
client
ClientChat.java 4KB
dao
UserDao.java 2KB
view
resource
chat.jpg 36KB
FrameLogin.java 5KB
RegistFrame.java 4KB
server
ServerChat.java 6KB
util
chat.jpg 36KB
resource
chat.jpg 36KB
JDBCUtil.java 2KB
SwingTester.java 1KB
bean
User.java 1KB
png
chat.jpg 36KB
out
production
chat
lib
mysql-connector-java-8.0.16.jar 2.19MB
poi-scratchpad-3.15-sources.jar 1021KB
images
chat.jpg 36KB
com
lt
client
ClientChat$2.class 1KB
ClientChat$1.class 1KB
ClientChat$Receive.class 2KB
ClientChat.class 4KB
dao
UserDao.class 2KB
view
FrameLogin$RegistListener.class 721B
RegistFrame.class 3KB
FrameLogin$2.class 981B
FrameLogin.class 5KB
resource
chat.jpg 36KB
RegistFrame$RegisterListener.class 2KB
RegistFrame$1.class 205B
RegistFrame$ResetListener.class 1022B
FrameLogin$1.class 848B
server
ServerChat$2.class 1KB
ServerChat.class 4KB
ServerChat$ClientConn.class 3KB
ServerChat$1.class 1KB
util
chat.jpg 36KB
JDBCUtil.class 2KB
SwingTester.class 2KB
resource
chat.jpg 36KB
bean
User.class 1KB
chat.iml 519B
.idea
uiDesigner.xml 9KB
libraries
mysql_connector_java_8_0_16.xml 256B
workspace.xml 9KB
misc.xml 278B
modules.xml 255B
.gitignore 184B
chat.sql 1KB
共 49 条
- 1
资源评论
不定积分_C
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- IMG_5905.PNG
- Cyclone Version 9.51
- 高性能量化回测工具 hikyuu 2.0.3 python 3.12 windows 安装包
- 省级城乡居民基本养老保险情况数据集(2010-2022年).xlsx
- 舞队填写版.cpp
- 基于BP神经网络的多输入单输出回归预测.zip
- 高性能量化回测工具 hikyuu 2.0.3 python 3.9 windows 安装包
- 省级城镇职工基本养老保险情况2000-2022年.xlsx
- 高性能量化回测工具 hikyuu 2.0.3 python 3.10 windows 安装包
- 算法部署-使用OpenVINO+C#部署PaddleOCR字符识别算法-项目源码-优质项目实战.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功