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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при работе с Сокетами 
V
    Опции темы
TYS0N
Дата 11.3.2009, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток. У меня такая проблема не пойму в чем дело? Вобщем есть класс в котором в цикле создается серверсокет и переводится в режим ожидания (цикл бесконечный), но при соединении к нему клиента.... клиент у меня конектиться от 2-х до 4-х раз, и после этого серверсокет "отказывается" соединяться? В чем дело не понятно.
Вот этот класс, в методе мэйн как раз вертится цикл:
Код

package serv;

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

public class Server {
  String port2;

  public Server(Socket soc) {
  potok potok = new potok();    
    try {
      InputStream in2 = soc.getInputStream();
      potok.self(this);
      potok.pot(in2);
      potok.start();
    }
    catch (IOException ex) {
    }
  }

  public static void main(String[] args) {
    while (true) {
      try {
        ServerSocket sock = new ServerSocket(2000);
        Socket sockap = sock.accept();
        System.out.println("asd");
        new Server(sockap);
      }
      catch (IOException ex) {
      }
    }
  }
}

Помогите плиз...
PM MAIL   Вверх
LSD
Дата 12.3.2009, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Покажи код potok-а.

З.Ы. И не используй в названии классов, методов и т.д. русских транслитерированных слов, есть же словари.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Platon
Дата 12.3.2009, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



или пиши нормальными русскими буквами  smile 
class Поток {
 ...
}
щутка ^_^

PM MAIL ICQ   Вверх
TYS0N
Дата 12.3.2009, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(LSD @ 12.3.2009,  12:34)
Покажи код potok-а.

З.Ы. И не используй в названии классов, методов и т.д. русских транслитерированных слов, есть же словари.

Вот код потока:
Код

package Thread;

import java.io.*;
import serv.*;
import Clien.*;
import javax.swing.*;
import obj.*;

public class potok
    extends Thread {

  InputStream setinput;
  Server ser1;

  public void pot(InputStream inp) {
    this.setinput = inp;
  }

  public void self(Server ser2) {
    ser1 = ser2;
  }

  public void  run() {

    while (true) {
      try {
        ObjectInputStream in = new ObjectInputStream(setinput);
        String path = (String) in.readObject();
        String name = (String) in.readObject();
        ser1.filecreate(path, name);
        String size = (String) in.readObject();
        int len = Integer.parseInt(size);
        int start = 0;
        if (len > 1024 * 1024) {
          while (len > start) {
            byte[] body = (byte[]) in.readObject();
            start = start + body.length;

            if (body.length < 1024 * 1024) {
              ser1.write(body, true);
            }
            else {
              ser1.write(body, false);
            }
          }
        }
        else {
          byte[] body = (byte[]) in.readObject();
          ser1.write(body, true);
        }
       }
      catch (ClassNotFoundException ex1) {
      }
      catch (IOException ex1) {
      }
    }
   }
}


Ну тогда и полный код класса Сервер выложу, просто не думал, что ошибка в потоке или в том куске класса Сервера, который я не выложил:
Код

package serv;

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

public class Server {
  String port2;
  int port;

//  String out;
  int len2;
  OutputStream ou;
//  Socket sockapnew;
  String path;
  File homedir;
  File f;
  FileOutputStream out = null;
  //Socket sockap;

  public Server(Socket soc) {
  potok potok = new potok();
    try {
      InputStream in2 = soc.getInputStream();
      potok.self(this);
      potok.pot(in2);
      potok.start();
    }
    catch (IOException ex) {
    }
  }

  public void filecreate(String path, String name) {
    if (path.equals("")) {
      homedir = new File(System.getProperty("user.home"));
    }
    else {
      homedir = new File(path);
      homedir.mkdirs();
    }
    f = new File(homedir, name);

    try {
      out = new FileOutputStream(f);
    }
    catch (FileNotFoundException ex) {
    }
  }

  public void write(byte[] body, boolean boo) {
    try {
      int len = body.length;
      out.write(body, 0, len);
    if(boo == true) {out.close();}
    }
    catch (IOException ex) {
    }
  }

  public static void main(String[] args) {
    while (true) {
      try {
        ServerSocket sock = new ServerSocket(2000);
        Socket sockap = sock.accept();
        System.out.println("asd");
        new Server(sockap);
      }
      catch (IOException ex) {
      }
    }
  }
}


Это сообщение отредактировал(а) TYS0N - 12.3.2009, 15:21
PM MAIL   Вверх
COVD
Дата 12.3.2009, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



начните с вынесения из цикла открытие ServerSocket. Это accept должен быть в цикле. И добавьте вывод в консоль в блоке catch.

Код

  public static void main(String[] args) {
    //while (true) {
      try {
        ServerSocket sock = new ServerSocket(2000);
        while (true) {

           Socket sockap = sock.accept();
           System.out.println("asd");
           new Server(sockap);

        }
      }
      catch (IOException ex) {
          ex.printStackTrace();
      }
    //}
  }


Это сообщение отредактировал(а) COVD - 12.3.2009, 15:32
PM MAIL   Вверх
TYS0N
Дата 12.3.2009, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(COVD @ 12.3.2009,  15:30)
начните с вынесения из цикла открытие ServerSocket. Это accept должен быть в цикле. И добавьте вывод в консоль в блоке catch.

Код

  public static void main(String[] args) {
    //while (true) {
      try {
        ServerSocket sock = new ServerSocket(2000);
        while (true) {

           Socket sockap = sock.accept();
           System.out.println("asd");
           new Server(sockap);

        }
      }
      catch (IOException ex) {
          ex.printStackTrace();
      }
    //}
  }

Спасибо брат! Помогло. Только я так и не понял в чем прикол был, почему до этого не работало...
PM MAIL   Вверх
LSD
Дата 12.3.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(TYS0N @  12.3.2009,  15:51 Найти цитируемый пост)
Только я так и не понял в чем прикол был, почему до этого не работало... 

После открытия первого ServerSocket и конекта первого клиента происходила, вторая итерация цикла. Предпринималась попытка открыть еще один ServerSocket, на том же порту. Вылетала ошибка, которая успешно игнорировалась твоим кодом. И так продолжалось бесконечно.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
TYS0N
Дата 12.3.2009, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(LSD @ 12.3.2009,  17:31)
Цитата(TYS0N @  12.3.2009,  15:51 Найти цитируемый пост)
Только я так и не понял в чем прикол был, почему до этого не работало... 

После открытия первого ServerSocket и конекта первого клиента происходила, вторая итерация цикла. Предпринималась попытка открыть еще один ServerSocket, на том же порту. Вылетала ошибка, которая успешно игнорировалась твоим кодом. И так продолжалось бесконечно.

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

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

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


 




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


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

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