package liaotian;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.BindException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.StringTokenizer;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
public class Server_more {
private JFrame frame;
private JTextArea contentArea; //文本域
private JTextField txt_message; //用于显示文本信息
private JTextField txt_max; //设置最大连接人数
private JTextField txt_port; //设置端口号
private JButton btn_start; //开始按钮
private JButton btn_stop; //断开按钮
private JButton btn_send; //发送按钮
private JPanel northPanel; //北方面板
private JPanel southPanel; //南方面板
private JScrollPane rightPanel; //左边滚动条
private JScrollPane leftPanel; //右边滚动条
private JSplitPane centerSplit; //分割线
private JList userList; //列表组件
private DefaultListModel listModel;
private ServerSocket serverSocket;
private ServerThread serverThread;
private ArrayList<ClientThread> clients;
private boolean isStart = false;
// 主方法,程序执行入口
public static void main(String[] args) {
new Server_more();
}
// 执行消息发送
public void send() {
if (!isStart) {
JOptionPane.showMessageDialog(frame, "服务器还未启动,不能发送消息!", "错误",
JOptionPane.ERROR_MESSAGE);
return;
}
if (clients.size() == 0) {
JOptionPane.showMessageDialog(frame, "没有用户在线,不能发送消息!", "错误",
JOptionPane.ERROR_MESSAGE);
return;
}
String message = txt_message.getText().trim();
if (message == null || message.equals("")) {
JOptionPane.showMessageDialog(frame, "消息不能为空!", "错误",
JOptionPane.ERROR_MESSAGE);
return;
}
sendServerMessage(message);// 群发服务器消息
contentArea.append("服务器:" + txt_message.getText() + "\r\n");
txt_message.setText(null);
}
// 构造放法
public Server_more() {
frame = new JFrame("服务器");
// 更改JFrame的图标:
//frame.setIconImage(Toolkit.getDefaultToolkit().createImage(Client.class.getResource("qq.png")));
//frame.setIconImage(Toolkit.getDefaultToolkit().createImage(Server.class.getResource("qq.png")));
contentArea = new JTextArea();
contentArea.setEditable(false);
contentArea.setForeground(Color.blue);
txt_message = new JTextField();
txt_max = new JTextField("30");
txt_port = new JTextField("5678");
btn_start = new JButton("启动");
btn_stop = new JButton("停止");
btn_send = new JButton("发送");
btn_stop.setEnabled(false);
listModel = new DefaultListModel();
userList = new JList(listModel);
southPanel = new JPanel(new BorderLayout());
southPanel.setBorder(new TitledBorder("写消息"));
southPanel.add(txt_message, "Center");
southPanel.add(btn_send, "East");
leftPanel = new JScrollPane(userList);
leftPanel.setBorder(new TitledBorder("在线用户"));
rightPanel = new JScrollPane(contentArea);
rightPanel.setBorder(new TitledBorder("消息显示区"));
centerSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel,
rightPanel);
centerSplit.setDividerLocation(100);
northPanel = new JPanel();
northPanel.setLayout(new GridLayout(1, 6));
northPanel.add(new JLabel("人数上限"));
northPanel.add(txt_max);
northPanel.add(new JLabel("端口"));
northPanel.add(txt_port);
northPanel.add(btn_start);
northPanel.add(btn_stop);
northPanel.setBorder(new TitledBorder("配置信息"));
frame.setLayout(new BorderLayout());
frame.add(northPanel, "North");
frame.add(centerSplit, "Center");
frame.add(southPanel, "South");
frame.setSize(600, 400);
//frame.setSize(Toolkit.getDefaultToolkit().getScreenSize());//设置全屏
int screen_width = Toolkit.getDefaultToolkit().getScreenSize().width;
int screen_height = Toolkit.getDefaultToolkit().getScreenSize().height;
frame.setLocation((screen_width - frame.getWidth()) / 2,
(screen_height - frame.getHeight()) / 2);
frame.setVisible(true);
// 关闭窗口时事件
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
if (isStart) {
closeServer();// 关闭服务器
}
System.exit(0);// 退出程序
}
});
// 文本框按回车键时事件
txt_message.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
send();
}
});
// 单击发送按钮时事件
btn_send.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
send();
}
});
// 单击启动服务器按钮时事件
btn_start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (isStart) {
JOptionPane.showMessageDialog(frame, "服务器已处于启动状态,不要重复启动!",
"错误", JOptionPane.ERROR_MESSAGE);
return;
}
int max;
int port;
try {
try {
max = Integer.parseInt(txt_max.getText());
} catch (Exception e1) {
throw new Exception("人数上限为正整数!");
}
if (max <= 0) {
throw new Exception("人数上限为正整数!");
}
try {
port = Integer.parseInt(txt_port.getText());
} catch (Exception e1) {
throw new Exception("端口号为正整数!");
}
if (port <= 0) {
throw new Exception("端口号 为正整数!");
}
serverStart(max, port);
contentArea.append("服务器已成功启动!人数上限:" + max + ",端口:" + port
+ "\r\n");
JOptionPane.showMessageDialog(frame, "服务器成功启动!");
btn_start.setEnabled(false);
txt_max.setEnabled(false);
txt_port.setEnabled(false);
btn_stop.setEnabled(true);
} catch (Exception exc) {
JOptionPane.showMessageDialog(frame, exc.getMessage(),
"错误", JOptionPane.ERROR_MESSAGE);
}
}
});
// 单击停止服务器按钮时事件
btn_stop.addActionListener(new ActionListener() {
public void actionPer
没有合适的资源?快使用搜索试试~ 我知道了~
java 用udp,tcp协议实现的局域网聊天程序 期末大作业 可私聊,群聊
共41个文件
class:28个
java:10个
classpath:1个
5星 · 超过95%的资源 需积分: 5 53 下载量 100 浏览量
2017-12-26
11:34:45
上传
评论 8
收藏 55KB RAR 举报
温馨提示
文件传输功能尚不完善,私聊群聊功能已经完善,这是我大一时写的期末大作业,现在分享给写大作业的同学,两台电脑要在同一局域网才能使用该程序聊天
资源推荐
资源详情
资源评论
收起资源包目录
liaotian.rar (41个子文件)
liaotian
bin
wenjianchuanshu
WenJianClient.class 3KB
GetDate.class 667B
WenJianServer$1.class 1KB
WenJianServer.class 3KB
liaotian
User.class 765B
Client_more$6.class 3KB
Client_more$MessageThread.class 4KB
Client_more$1.class 676B
Server_more$2.class 673B
Server_more$1.class 795B
Server_more$ClientThread.class 5KB
Client_more.class 8KB
Client_more$2.class 673B
Server_more$4.class 2KB
Server_more$5.class 2KB
Client_more$4.class 2KB
Client_more$5.class 1KB
Server_more$ServerThread.class 3KB
Server_more.class 8KB
Client_more$7.class 806B
Client_more$3.class 1KB
Server_more$3.class 676B
Key
qingqiu.class 3KB
jianting.class 3KB
siliao
Udp1$1.class 1KB
Udp1.class 4KB
Udp2$1.class 1KB
Udp2.class 4KB
.settings
org.eclipse.jdt.core.prefs 598B
src
wenjianchuanshu
WenJianServer.java 2KB
GetDate.java 399B
WenJianClient.java 2KB
liaotian
User.java 527B
Server_more.java 17KB
Client_more.java 15KB
Key
qingqiu.java 2KB
jianting.java 3KB
siliao
Udp2.java 3KB
Udp1.java 3KB
.project 384B
.classpath 301B
共 41 条
- 1
资源评论
- qq_380384302019-03-08这资源很好
梓森
- 粉丝: 2
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功