📄 serverchat.java~41~
字号:
package chattingroom2;
import java.net.*;
import java.io.*;
import java.lang.Thread;
import javax.swing.*;
import chattingroom2.serverThread;
import java.util.Vector;
/**
* <p>Title: ServerApplication for chattingroom</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author 郭尚波
* @version 1.0
*/
public class ServerChat extends Thread{
static int MaxConnection=30;//连接到服务器的最大主机数
//DataInputStream input=null; //输入流,来自客户端
private ServerSocket serverSocket = null;
public static int port = 8162;
Vector clientSockets = new Vector(MaxConnection);//定义一个Vector对象数组,用来保存已建立连接的Socket对象
static Socket tmpSkt;
public ServerChat(JTextArea jtextArea) throws IOException {
try {
serverSocket = new ServerSocket(port);
}
catch (Exception ex) {
JOptionPane.showMessageDialog(null,"监听端失败! 错误:"+ex.getMessage()+",请重启服务程序!","系统提示消息",1);
System.exit(-1);
}
//JOptionPane.showMessageDialog(null,"成功监听端口:" + port,"系统提示消息",1);
int i=0;
while ( i<MaxConnection)//当连接到服务器的客户端小于最大允许数目则继续监听,否则退出监听
{tmpSkt=serverSocket.accept();
if(tmpSkt.isConnected())
{
addClient(jtextArea,tmpSkt);//更新在线用户信息
i++;
}
}
}
public void addClient(JTextArea jtextArea,Socket socket) throws IOException {
new serverThread(socket, this).start();
clientSockets.add(socket);
synchronized(this)
{
send("欢迎 " + socket.getInetAddress().getHostName() +
" 进入此聊天室\n");
if (jtextArea.getRows() == 15) { //如果文本域超过10行就全部清空
jtextArea.removeAll();
}
jtextArea.append(socket.getInetAddress().getHostName() + "已进入\n"); //将在线用户信息写到文本域中
jtextArea.append("聊天室共有 " + clientSockets.size() + " 人"); //将在线用户数目写到文本域中
}
jtextArea.getParent().repaint();//刷新屏幕
}
public void removeClient(JTextArea jtextArea,Socket socket) throws IOException {
send(socket.getInetAddress().getHostName()+" ,谢谢您的使用,再见! ");
clientSockets.remove(socket);
synchronized(this){
jtextArea.append(socket.getInetAddress().getHostName() + "已离去"); //将下线用户信息写到文本域中
jtextArea.append("聊天室共有 " + clientSockets.size() + " 人"); //将新的在线用户数目写到文本域中
jtextArea.getParent().repaint(); //刷新屏幕
}
}
public void send(String Info) throws IOException {
Socket socket = null;
for (int I = 0; I < clientSockets.size(); I++) {
socket = (Socket)(clientSockets.get(I));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);//获取套接字的输出流
out.println(Info);//发送到客户端
out.flush();
}
}
public static void main(String[] args) throws IOException {
new ServerChat(new JTextArea());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -