📄 sendserver.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 + -