Мой базовый сервер Java принимает 3 клиентов вместо 2 - PullRequest
0 голосов
/ 17 декабря 2009

Хорошо, это звучит просто, но я попробовал все простые вещи, и это все еще не работает должным образом.

import java.net.*;
import java.io.*;

public class MyServer{
    public static void main(String[] args) throws IOException {

        int MAX_PLAYERS = 1;
        int players = 0;

        ServerSocket serverSocket = new ServerSocket(43);

        while(players < MAX_PLAYERS){
            if(players < MAX_PLAYERS)
                new MyThread().start(serverSocket.accept());

            players++;
        }



        serverSocket.close();
        System.exit(0);
    }
}

Ответы [ 2 ]

1 голос
/ 17 декабря 2009

Если два игрока соединяются в одно и то же время, это возможно. Вам необходимо исключительно заблокировать или синхронизировать раздел, где вы принимаете новых игроков.

0 голосов
/ 17 декабря 2009

Проблема с вашим кодом связана с неправильным форматированием. Если вы подключаетесь к клиенту, вы должны увеличивать переменную player только тогда, когда это происходит.

    while(players < MAX_PLAYERS){
        if(players < MAX_PLAYERS)  >>{<<<
            new MyThread().start(serverSocket.accept());

            players++;
        >>}<<
    }

Я удивлен, что вы подключились к клиенту в первую очередь.

Кроме того, метод запуска для потока не принимает параметры. Runnable интерфейс не принимает параметр для метода run.

...