package server;
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;
import pojo.User;
/**
* 服务器端(在eclipse中直接F11运行)
*/
public class Server
{
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;
@SuppressWarnings("rawtypes")
private JList userList;
@SuppressWarnings("rawtypes")
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();
}
// 执行消息发送
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);
}
// 构造放法
@SuppressWarnings({ "rawtypes", "unchecked" })
public Server()
{
frame = new JFrame("服务器");
// 更改JFrame的图标:
//frame.setIconImage(Toolkit.getDefaultToolkit().createImage(Client.class.getResource("qq.png")));
//frame.setIconImage(Toolkit.getDefaultToolkit().createImage(Server.class.getResource("qq.jpg")));
contentArea = new JTextArea();
contentArea.setEditable(false);
contentArea.setForeground(Color.blue);
txt_message = new JTextField();
txt_max = new JTextField("30");
txt_port = new JTextField("6666");
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);
conte
没有合适的资源?快使用搜索试试~ 我知道了~
java写局域网通讯工具(只需jdk1.7即可运行!)
共42个文件
class:28个
java:7个
png:3个
需积分: 9 14 下载量 145 浏览量
2018-04-20
16:50:27
上传
评论 2
收藏 221KB RAR 举报
温馨提示
java写局域网通讯工具(只需jdk1.7即可运行!),主要使用socket编程编写,完美实现局域网内信息通讯,可限制聊天人数和端口号设置!
资源推荐
资源详情
资源评论
收起资源包目录
java写局域网通讯工具(只需jdk1.7即可运行!).rar (42个子文件)
客户端+服务器端
send_manager
bin
client
Client$1.class 636B
Client$2.class 633B
Client$3.class 2KB
Client$6.class 759B
Client$MessageThread.class 4KB
Client$4.class 1KB
Client$5.class 1KB
Client.class 8KB
server
Server$5.class 2KB
Server$4.class 2KB
Server$ClientThread.class 4KB
Server$1.class 748B
Server$ServerThread.class 3KB
Server$3.class 636B
Server.class 8KB
Server$2.class 633B
pojo
User.class 822B
oldchat
ChatFrame.class 384B
src
client
Client.java 17KB
server
Server.java 19KB
pojo
User.java 489B
oldchat
ChatFrame.java 156B
.project 388B
.classpath 232B
使用帮助
1.png 54KB
2.png 65KB
3.png 65KB
给别人的客户端
send_manager
bin
client
Client$1.class 636B
Client$2.class 633B
Client$3.class 2KB
Client$6.class 759B
Client$MessageThread.class 4KB
Client$4.class 1KB
Client$5.class 1KB
Client.class 8KB
pojo
User.class 822B
oldchat
ChatFrame.class 384B
src
client
Client.java 17KB
pojo
User.java 489B
oldchat
ChatFrame.java 156B
.project 388B
.classpath 232B
共 42 条
- 1
资源评论
下輩子説再見
- 粉丝: 1
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功