?? server.java
字號:
package org.netjava.jportmap;
import java.net.*;
import java.util.*;
/**
* <p>Title: 端口轉發器</p>
* <p>Description:啟動監聽服務 </p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: www.NetJava.org</p>
* @author javafound
* @version 1.0
*/
public class Server extends Thread {
//創建一個轉發服務器
public Server(Route route, int id) {
this.route = route;
connectionQueue = new Vector();
myID = id;
start();
}
//關閉這個服務器:
public void closeServer() {
isStop = true;
if (null != myServer) {
closeServerSocket();
} while (this.connectionQueue.size() > 0) {
Transfer tc = (Transfer) connectionQueue.remove(0);
tc.closeSocket(tc.socket);
tc = null;
}
}
//啟動轉發服務器的執行線程
public void run() {
SysLog.info(" start Transfer......:" + route.toString());
ServerSocket myServer = null;
try {
InetAddress myAD = Inet4Address.getByName(route.LocalIP);
myServer = new ServerSocket(route.LocalPort, 4, myAD);
} catch (Exception ef) {
SysLog.severe("Create Server " + route.toString() + " error:" + ef);
closeServerSocket();
return;
}
SysLog.info("Transfer Server : " + route.toString() + " created OK");
while (!isStop) {
String clientIP = "";
try {
Socket sock = myServer.accept();
clientIP = sock.getInetAddress().getHostAddress();
if (checkIP(route, clientIP)) {
SysLog.warning(" ransfer Server : " + route.toString() +
" Incoming:" + sock.getInetAddress());
sock.setSoTimeout(0);
connCounter++;
Transfer myt = new Transfer(sock, route);
connectionQueue.add(myt);
} else {
SysLog.warning(" ransfer Server : " + route.toString() +
" Refuse :" + sock.getInetAddress());
closeSocket(sock);
}
} catch (Exception ef) {
SysLog.severe(" Transfer Server : " + route.toString() +
" accept error" + ef);
}
}
}
//檢測進入的IP是否己許可
private static boolean checkIP(Route route, String inIP) {
String[] inI = string2StringArray(inIP, ".");
String[] list = string2StringArray(route.AllowClient, ".");
if (inI.length != list.length) {
SysLog.severe(" Transfer Server Error Cfg AllowClient : " +
route.toString());
return false;
}
for (int i = 0; i < inI.length; i++) {
if ((!inI[i].equals(list[i])) && !(list[i].equals("*"))) {
System.out.println(": " + inI[i] + " :" + list[i]);
return false;
}
}
return true;
}
/*
* 把字符串數組用separator銜接為一個字符串
* @param srcString 原字符串
* @param separator 分隔符
* @return 目的數組
*/
private static final String[] string2StringArray(String srcString,
String separator) {
int index = 0;
String[] temp;
StringTokenizer st = new StringTokenizer(srcString, separator);
temp = new String[st.countTokens()];
while (st.hasMoreTokens()) {
temp[index] = st.nextToken().trim();
index++;
}
return temp;
}
//關閉ServerSocket
private void closeServerSocket() {
try {
this.myServer.close();
} catch (Exception ef) {
}
}
private void closeSocket(Socket s) {
try {
s.close();
} catch (Exception ef) {
}
}
//服務器
private ServerSocket myServer = null;
//連結隊列控制
private boolean isStop = false;
//
private Vector connectionQueue = null;
private int connCounter = 0;
// 路由對象
private Route route = null;
//連結的ID號,暫未用
private static int myID = 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -