Java Serversocket отклоняет соединение, даже когда очередь не заполнена
Привет я пытаюсь настроить ServerSocket в Java, и я сохранил уровень невыполненных работ по умолчанию 50. У меня есть 5 клиентов, пытающихся подключиться к серверу практически одновременно. Иногда все идет гладко, в то время как некоторые соединения клиента отклоняются сервером. Я пытался увеличить значение отставания до 100, но не повезло. Я использую Ubuntu 13.10. Есть идеи?
package networkmodule;
import iomodule.FileHandler;
import java.io.*;
import java.net.*;
import java.util.*;
public class FileReceiveServer implements Runnable {
private ServerSocket server;
private int receiveport;
private boolean isMaster;
private boolean isStats;
private ArrayList<Thread> clientThreads;
private int totalClients;
private int clientsReceived;
public FileReceiveServer(int receiveport, boolean isMaster, boolean isStats) {
this.receiveport = receiveport;
this.isMaster = isMaster;
this.isStats = isStats;
clientThreads = new ArrayList<Thread>();
if (isMaster && !isStats) {
totalClients = ((Hashtable<String, String>) FileHandler.loadObject("clientstats")).size();
clientsReceived = 0;
}
try {
server = new ServerSocket(receiveport);
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
try {
while (true) {
Socket clientSocket = server.accept();
Thread newClientThread = new Thread(new FileReceiverThread(clientSocket, isMaster, isStats));
clientThreads.add(newClientThread);
newClientThread.start();
if (isMaster && !isStats) {
clientsReceived++;
}
}
} catch (IOException e) {
}
}
public boolean checkThreadCompletion() {
if (isMaster) {
if (clientsReceived < totalClients) {
return false;
}
if (clientThreads.size() > 0) {
for (Thread t : clientThreads) {
if (t != null) {
if (t.isAlive()) {
return false;
}
}
}
return true;
}
return false;
} else {
if (clientThreads.size() > 0) {
for (Thread t : clientThreads) {
if (t != null) {
if (t.isAlive()) {
return false;
}
}
}
return true;
}
return false;
}
}
public void stopServer() {
try {
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Это довольно простой код, и я понятия не имею, почему иногда происходит сбой. Здесь важно то, что он выходит из строя только иногда не всегда, а когда он терпит неудачу, он всегда терпит неудачу на стороне клиента, когда я пытаюсь создать сокет для подключения к серверу:
java.net.ConnectException: Socket Connection Refused
Есть идеи?
Спасибо