⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serverchat.java~41~

📁 这是我的Java课程设计
💻 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 + -