Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Гарантия доставки сообщения клиенту, Клиенту не всегда доходят все сообщения  
:(
    Опции темы
Dewy
Дата 14.4.2009, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 13.4.2009

Репутация: нет
Всего: нет



Сервер работает только с двумя клиентами (игра двух лиц). По этому отдельные потоки  для клиентов не создаются. Если это клиенты telnet  - работает правильно, но для для мною написанных  - сообщения от сервера доходят вразнобой. Могут дойти все, может какое-то потерятся. 
Как гарантировать доставку полностью всех сообщений?

Сервер, подключение клиентов :

Код


private void connection() {
        // TODO Auto-generated method stub
        try {
            int i = 1;

            ServerSocket s = new ServerSocket(8189);
            players = new Dicer[30];
            ListDemoForServer.main1("Server");

        boolean wait=false;
                     // ждем, пока все клиенты подключатся colPlayers=2
            for (int j = 0; j < colPlayers; j++) {
                Socket incoming = s.accept();
                Integer I = new Integer(j + 1);
                if((j+1)!=colPlayers) wait=true;
                                        // создаем нового игрока 
                players[i - 1] = new Dicer(incoming, i, I.toString(),wait);
                wait=false;
                i++;
                
            }


Сервер, отправка,прием сообщений

Код


public class Dicer {

    public Socket socket;
    PrintWriter ouT;
    BufferedReader in;
    
    public Dicer(Socket i, int col, String name_, boolean wait)
            throws IOException {
                socket = i;
        try {ouT = new PrintWriter(socket.getOutputStream(), true);
        } catch (IOException e) {
            
            e.printStackTrace();
        }
        try {    in = new BufferedReader(new InputStreamReader(socket
                                .getInputStream()));
        } catch (Exception e) {
            e.printStackTrace();
            
        }
        out("Hello!" + "Ent u'r nik!");
        

    }

    public void out(String s) throws ConnectionResetException,
            ConnectionResetException {
        try {
            ouT = new PrintWriter(socket.getOutputStream(), true);
            ouT.println(s+"\n");
            ouT.flush();
        
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

public String in() //throws ConnectException, ConnectionResetException,
    {
    String line=null;
        try {    in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            return in.readLine();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }    
}



Клиент

Код


public class SocketTest {

    Socket s;
    public void connection(){
        
        try {
            s = new Socket("127.0.0.1", 8189);
        }

        catch (ConnectException e) {
            System.out.println("NO Connect:     " + e);
            conn="NO Connect:     " + e;
        } catch (UnknownHostException e) {
                e.printStackTrace();
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

    public void out(String z) {
            try {
                PrintWriter out = new PrintWriter(s.getOutputStream(), true);
                if (!z.equals(null)) {
                    out.println(z+"\n");
                    out.flush();
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
    }
    public String in() throws ConnectException {
        String line;
        if (b) {
            try {    BufferedReader in = new BufferedReader(new InputStreamReader(s    .getInputStream()));
                line = in.readLine();
                } catch (Exception e) {
                line = "not connect to server";
                e.printStackTrace();
        }
            return line;
        } else
            return "not connect to server";
    }
    static public void main(String[] args) throws ConnectException {
        SocketTest st = new SocketTest();
        }
}


PM MAIL   Вверх
Platon
Дата 2.5.2009, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 3
Всего: 40



Dewy, ужасная утечка указателей потоков данных.
Зачем вы для каждого сообщения создаете очередной поток данных?
Второй код строки: 29, 41
третий код строки: 24, 37

Скорее всего, проблема кроется не в этом, но попробуйте.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0462 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.