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

📄 sendserver.java

📁 用Java编写的GPS监控系统后台私服的核心代码。
💻 JAVA
字号:
package com.hualong.communication;

import com.hualong.application.ApplicationContext;
import com.hualong.log.CommonLogger;

import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * Created by IntelliJ IDEA.
 * User: 
 * Date: 2003-10-31
 * Time: 17:36:50
 * 模块功能描述:它是一个ServerSocket线程函数,主要用来侦听来自监控中心的监控终端
 *               的Socket接入请求,并把接入Socket保存到ssHelperQueue队列中,
 *               以便于在网络数据路由时用。
 * 模块修改日志:2003.12.08   修改了一处(1)注释掉ssHelper.start();
 */
public final class SendServer extends Thread {
    /**
     * ServerSocket的缺省侦听端口
     */
    private int nDefaultPort = 9001;
    /**
     * ServerSocket实例对象,用来保存接入Client端(指监控终端)的SendServerSocket实例;
     */
    private ServerSocket sendServerSocket;
    /**
     * 用来保存Client端(指监控终端)Socket接入实例
     */
    private Socket newConnection;
    /**
     * ServerSocket同时接入Client端(指监控终端)的Socket实例的最大个数
     */
    private int nNumberOfClients = 10;
    /**
     * 用于保存已接入SendServerHelper实例
     */
    public static SendServerHelperQueue ssHelperQueue;
    /**
     * 用于保存已注册的监控终端的信息的队列
     */
    public static RegisteredTerminalsQueue rtQueue;

    /**
     * 构造函数
     *
     * @param nServerPort 服务器端口号
     */
    public SendServer(int nServerPort) {
        if (nServerPort > -1) {
            this.nDefaultPort = nServerPort;
        }
        ssHelperQueue = new SendServerHelperQueue();
        rtQueue = new RegisteredTerminalsQueue();
    }

    /**
     * 线程函数
     */
    public void run() {
        int nClients = ApplicationContext.getCommonConfig().getMaxClientCount();
        if (nClients > 0) {
            this.nNumberOfClients = nClients;
        }
        try {
            this.sendServerSocket = new ServerSocket(this.nDefaultPort,
                    this.nNumberOfClients);

            /**
             * 启动发送服务器侦听端口服务,用于接入来之监控设备的
             * 连接请求。如果由接入请求,则启动与之对应的Socket线程
             * 进行通讯
             */
            while (true) {
                this.newConnection = sendServerSocket.accept();

                SendServerHelper ssHelper =
                        new SendServerHelper(this.newConnection);
                String strRemoteIP = newConnection.getInetAddress().getHostAddress();

                ssHelperQueue.deleteHelperFromQueue(strRemoteIP);
                ssHelperQueue.deleteHelperFromQueueEx();

                //ssHelper.start();
                ssHelperQueue.addHelperToQueue(ssHelper);
                //sleep(100);
            }
        } catch (IOException e) {
            //e.printStackTrace();
        }
    }

    /**
     * 得到客户端的Socket的IP地址
     *
     * @param socket socket实例
     * @return 对应的监控终端的IP地址
     */
    public String getConnectorIPAddress(Socket socket) {
        if (socket == null)
            return null;

        InetAddress address = socket.getInetAddress();
        return address.getHostAddress();
    }

    /**
     * 关闭所有Socket连接
     */
    public void CloseAllSocket() {
        ssHelperQueue.closeAllSocket();
        ssHelperQueue.clearQueue();

        try {
            this.sendServerSocket.close();
            this.sendServerSocket = null;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 关闭ReceiveServer的侦听端口
     *
     * @throws IOException 抛出IO操作异常
     */
    public void cleanResources() throws IOException {
        if (this.sendServerSocket != null) {
            this.sendServerSocket.close();
            this.sendServerSocket = null;
        }

        if (ssHelperQueue != null) {
            ssHelperQueue.closeAllSocket();
            ssHelperQueue.clearQueue();
            ssHelperQueue = null;
        }
        
        if (rtQueue != null) {
            rtQueue.clearQueue();
            rtQueue = null;
        }
    }

    /**
     * 释放资源
     *
     * @throws Throwable 抛出IO操作异常
     */
    public void finalize() throws Throwable {
        try {
            cleanResources();
        } catch (IOException e) {
            CommonLogger.Error("SendServer", e.getMessage());
        }
        super.finalize();
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -