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

Есть идеи?

Спасибо

0 ответов

Другие вопросы по тегам