|
|
Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
...
private static final byte MAX_CONS_PER_MIN = 5;
private HashMap<String, ArrayList<Long>> connections;
public Server() {
connections = new HashMap<String, ArrayList<Long>>();
}
private void listen() {
ServerSocket listener;
try {
listener = new ServerSocket(port);
} catch (IOException e) {
e.printStackTrace();
return;
}
System.out.println(String.format("Listening on port %d.", port));
while (true) {
Socket socket;
try {
socket = listener.accept();
} catch (IOException e) {
e.printStackTrace();
continue;
}
String ip = socket.getInetAddress().getHostAddress();
ArrayList<Long> cons = connections.get(ip);
if (cons == null) {
cons = new ArrayList<Long>();
}
long current = System.currentTimeMillis();
cons.add(current);
connections.put(ip, cons);
if (cons.size() > MAX_CONS_PER_MIN) {
int count = 0;
for (long con : cons) {
if (con > current - 60000) {
count++;
if (count > MAX_CONS_PER_MIN) {
break;
}
}
}
if (count > MAX_CONS_PER_MIN) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
continue;
}
}
}
Client client = new Client(socket);
new Thread(client).start();
}
}
...
|
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Flav« (11. März 2012, 16:08)
Benutzer, die sich für diesen Beitrag bedankt haben:
Benutzer, die sich für diesen Beitrag bedankt haben: