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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передеча данных по сети, помогите передать по сети XML 
:(
    Опции темы
#Maestro#
Дата 9.6.2009, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



передаётся по сети файл , он приходит пустым - ошибка может быть как со стороны клиента, так и со стороны сервера?
Фрагмент кода клиента:
Код


  try {

       Socket s = new Socket("192.168.0.78", 8823);


        InputStream inputStream = new FileInputStream("C:\\workbook.xml ");
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"UTF-8");

 BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));


 SocketChannel channel = SocketChannel.open(new InetSocketAddress("192.168.0.78", 8823)); //ot sasha

       byte[] buf = new byte[255];
 int len = 0;

       try{
 // Write the output to a file
                OutputStream out = new FileOutputStream("temp/socketTest.xls");
                wb.write(out);

                out = Channels.newOutputStream(channel);
            Scanner in = new Scanner(inputStreamReader);

                 while ((len = inputStreamReader.read()) > 0)
             {
                  String line = in.nextLine();
                 out.write(buf);
                 out.flush();
             }

            s.close();
         }
           finally {s.close();}
      }
      catch (Exception e) {e.printStackTrace();}

Сервера 
Код

public void run()
    {
        try
    {

while (true)
        {
            ServerSocket s = new ServerSocket(8823);
            Socket incoming = s.accept();
            Runnable r = new TestServerHandler(incoming);
            Thread t = new Thread(r);
            t.start();
        }

    //Socket incoming = s.accept();

    }
    catch(IOException e) {e.printStackTrace();}
    }

}
    class TestServerHandler implements Runnable
    {
        Socket incoming;
        public TestServerHandler(Socket incoming)
        {
            this.incoming = incoming;
        }

        public void run()
        {
            try
            {
            BufferedReader in = new BufferedReader(new InputStreamReader(incoming.getInputStream()));

 char[] buf = new char[255];

 OutputStream outputStream = new FileOutputStream("C:\\workbook.xml");
 //Приводим поток к потоку форматированного вывода
 OutputStreamWriter outStreamWriter = new OutputStreamWriter(outputStream, "UTF-8");

  String inS = incoming.getInetAddress().getLocalHost().toString();

 int len = 0;

 while (((len = in.read(buf))) > 0)
 {
     //Выводим в файл полученный пакет
     outStreamWriter.write(buf,0,255);
 }

 in.close();
 outStreamWriter.close();

 }
    catch(IOException e) {e.printStackTrace();}
        }
}


прошу помочь. спосибо

Это сообщение отредактировал(а) #Maestro# - 9.6.2009, 16:27
PM MAIL   Вверх
LSD
Дата 9.6.2009, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Ты везде заводишь переменную len куда пишешь, сколько байт прочитано. Но дальше совершенно игнорируешь эту информацию. Почему?


--------------------
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   Вверх
#Maestro#
Дата 10.6.2009, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



если честно - с переменной len это был пример, найденный в инете. а что с этой переменной следует сделать? подскажите!
PM MAIL   Вверх
GirroKepasso
Дата 10.6.2009, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Этот код у тебя компилируется?
Код запутаный - какая-то смесь из посимвольного, буферезированого и буферезированого с использованием Scaner , в добавок смешаны работа с блокирующими сокетами(Soket)  и асинхронными сокетами (SocketChanel) и  с ошибками и возможно не компилируется.
Видно , что путаница в методах read . Глянь документацию InputStreamReader метод read 
Без параметров read() возвращает прочитаный символ(тип integer), 
а вот если читать с параметрами read(buf, 0, bufSize) , то метод возвращает количество прочитаных символов, а сами символы записываються в buf.

На клиенте:
Код

 out = Channels.newOutputStream(channel);
            Scanner in = new Scanner(inputStreamReader); 
                 while ((len = inputStreamReader.read()) > 0) //inputStreamReader читаете по одному символу, присваивает символ в len (поэтому лучше назвать ее chr)
             {
                 String line = in.nextLine(); //читаем строку , но никуда ее не пишем
                 out.write(buf);   //отсылает buf , ты его только объявил , но ничего в него не присваивал 
                 out.flush();
             }



По сути если что-то и шлется, то это порции по 255 символов "00" (пустой масив buf)

Я бы посоветовал глянуть в официальном туториале про потоки ввода/вывода ,про работу с сетью , там есть и примеры. А потом вооружившись переписать код.
Основы потоков ввода/вывода
Работа с сокетами



PM MAIL   Вверх
#Maestro#
Дата 10.6.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



извинаюсь, "официальный туториал" это где такое? можно ссылку? был бы очень благодарен! 
кстати, а вот если как-то так, будет работать?
Код

try {
SocketChannel channel = SocketChannel.open(new InetSocketAddress("192.168.0.78", 23));

try{
FileOutputStream out = new FileOutputStream("temp/socketTest.xls");
wb.write(out);
out.flush();
//out.close();
//out = Channels.newOutputStream(channel);
}
//finally {s.close();}
}
catch (Exception e) {e.printStackTrace();}


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

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

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


 




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


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

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