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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Тестирование HttpConnection 
:(
    Опции темы
Nemesis
  Дата 21.8.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 20.2.2005
Где: Москва

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



Доброго дня всем!
У меня есть небольшая проблемка, надеюсь, вы поможите мне ее решить. Каким образом я могу проверить работоспособность мидлета, который устанавливает HttpConnection с сервером? Дело в том, что удаленного сервера пока нет и тестировать нужно в локальных  рамках, т.е. как бы мне приконнектиться к localhost и передать туда массив байтов (по идее на сервак передается изображение). Я так понимаю нужно еще писать свою небольшую прогу (сервер), которая бы прослушивала какой-то порт на моем компе.. или как? просто не имел дела с подобными вещами. 
Заранее спасибо!
--------------------
PM MAIL   Вверх
Dancer
Дата 21.8.2006, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

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



я обычно поднимаю Apache у себя на компе, делаю скрипт нужный мне на перле (иногда JSP использую с котом Томом, Tomcat) и таким вот макаром отрабатываю взаимодействие с сеткой моего мидлета.


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
Nemesis
Дата 21.8.2006, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 20.2.2005
Где: Москва

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



 smile ох елы палы  smile  да уж, пожалуй дождусь сервака тогда. 
Dancer, а скажи пожалуйста, с httpConnection часто возникают проблемы? Мне вот по сути просто передать массив байтов - картинку, на сервак..

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

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



ды я бы не сказал что большие проблемы возникают.
Как и с обычным потоком работаешь. Вроде бы ничего такого...... smile
А чем тебя так испугало поднятие локального сервака? (очень удобно для разработки, ИМХО конечно, но а по другому то как?)
Можно конечно написать мидлет, который у тебя будет как сервер работать, его запускать первым, потом запускть твоего клиента, можно и так рабоать. Кстати, посмотри в примеры WTK там такой мидлетик точно есть.

Всё делается на локальной машине, не нужно никакой сетки. Очень не плохо отлаживать код (просто на ошибки). В сетке уже нужно смотреть как будет быстродействие, сетка отваливаться и всё такое.  А просто код погонять - лишь локальный сервак (всё ИМХО)

Добавлено @ 18:52 
музыку я гонял с сервака, организовывл протокол передачи данных между мидлетом и специфическим серваком, нормально всё шлётся, проблем никаких smile. Посмотри примеры из WTK

Это сообщение отредактировал(а) Dancer - 21.8.2006, 18:52


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
Nemesis
Дата 21.8.2006, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 20.2.2005
Где: Москва

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



Оки, пасибо! Вот со 2ым мидлетом-сервером, хорошая идея, надо будет попробовать. 
--------------------
PM MAIL   Вверх
javastic
Дата 22.8.2006, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1214
Регистрация: 18.3.2005
Где: St.Petersburg

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



Цитата(Nemesis @ 21.8.2006,  18:44)
Мне вот по сути просто передать массив байтов - картинку, на сервак..

Придётся кодировать бинарные данные. А серверный скрипт должен декодировать и сохранять это дело на диск.
Я пол года назад делал приложение которое фоткает со встроеннй камеры, а затем передаёт изображение на сервак.



--------------------
01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011
scjp, mcp 
PM MAIL WWW ICQ   Вверх
redrick
Дата 22.8.2006, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

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



Nemesis
Dancer, тоже пользуюсь апачем для этих целей - имхо оно того стоит - один раз научишься - и потом экономишь время.


--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
Nemesis
Дата 22.8.2006, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 20.2.2005
Где: Москва

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



Да, вы правы, надо научиться этому делу  smile 
Если можно, еще кое что... У меня проблема появилась с записью в исходящий поток..
Вот я делаю в новом потоке след действия:
Код

public void run()
    {
        try
        {
            sc = (SocketConnection) Connector.open("socket://localhost:5000");
            
            os = sc.openOutputStream();
            
            if(imageData != null)
            {
             System.out.println("sending data...");
             for(int i=0; i<imageData.length; i++)
                 os.write(imageData[i]);
            }
            
            
            if(os != null)
             os.close();
            
            if(sc != null)
             sc.close();
            
        }
        catch(Exception exc)
        {
            exc.printStackTrace();
        }
        
    }

Но у меня предчувствие, что в os ничего не записывается... 

Вот тут, в другом потоке, я считываю данные:

Код

public void run()
    {
        try
        {
            ssc = (ServerSocketConnection) Connector.open("socket://:5000");
            
            sc = (SocketConnection) ssc.acceptAndOpen();
            is = sc.openInputStream();

            while (true) 
            {
                int tmpData[] = new int[5000];
                int i = 0;
                int c = 0;
                
                while(((c = is.read()) != '\n') && (c != -1)) 
                {
                    tmpData[i] = c;
                    i++;
                }

                if (c == -1) 
                {
                 imageData = new int[i];     // [I]кол-во i - определяется правильно, 45*45 (размер картинки)[/I]
                 System.arraycopy(tmpData, 0, imageData, 0, imageData.length); // [I]а вот данные все 0[/I]
                 isDone = true;
                 tmpData = null;
                    break;
                }
            }
            
            if(is != null)
             is.close();
                     
            if(ssc != null)
             ssc.close();
            if(sc != null)
             sc.close();
            
        }
        catch(Exception exc)
        {
            exc.printStackTrace();
        }
        
    }


javastic, а вот по поводу кодировки, это для уменьшения объема данных? Или для чего? 
P.S. Ты знаешь, у меня практически точно такое же задание  smile 
--------------------
PM MAIL   Вверх
redrick
Дата 22.8.2006, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

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



Nemesis, по поводу кода - а какова природа imageData ?

Цитата(Nemesis @  22.8.2006,  21:39 Найти цитируемый пост)
javastic, а вот по поводу кодировки, это для уменьшения объема данных? Или для чего? 
P.S. Ты знаешь, у меня практически точно такое же задание  smile  

прямые конкуренты )


--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
Nemesis
Дата 22.8.2006, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 20.2.2005
Где: Москва

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



redrick, imageData - это массив int`ов, полученный с помощью метода 
getRGB(int[] imageData, int offset, int scanlength, int x, int y, int width, int height)

Цитата(redrick @  22.8.2006,  23:24 Найти цитируемый пост)
прямые конкуренты )

Ага, забавно)) Хотя он говорит, что уже делал.. 
--------------------
PM MAIL   Вверх
javastic
Дата 23.8.2006, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1214
Регистрация: 18.3.2005
Где: St.Petersburg

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



Цитата(Nemesis @ 22.8.2006,  21:39)
javastic, а вот по поводу кодировки, это для уменьшения объема данных? Или для чего? 
P.S. Ты знаешь, у меня практически точно такое же задание  smile

У тебя оно сейчас, у меня уже было smile
Объем наоборот вырастит. А надо чтобы данные не побились. Например когда отсылается атачмент вместе с электронным письмом он кодируется алгоритмом  mime64.

Добавлено @ 09:10 
Цитата(Nemesis @ 22.8.2006,  22:29)
Ага, забавно)) Хотя он говорит, что уже делал..

Вот результат работы http://oko.awardspace.com/test.php

Могу выложить само приложение, если хочешь протестировать.


--------------------
01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011
scjp, mcp 
PM MAIL WWW ICQ   Вверх
Dancer
Дата 23.8.2006, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

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



ну, вообще-то INT ты не можешь гонять через OutputStream и InputStream, тебе можно лишь с массивом byte работать. Так что нужно перевдить. Получаешь из массива INT массив BYTE, и этот массив уже шлёшь. На принимающей стороне, получаешь массив BYTE, преобразуешь его к массиву INT и получаешь уже свою картинку через Image.createImage()

при использовании вот этого ты получаешь BYTE (int read()) и только BYTE, никак не INT.
Код

public abstract int read()
                  throws IOExceptionReads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. If no byte is available because the end of the stream has been reached, the value -1 is returned. This method blocks until input data is available, the end of the stream is detected, or an exception is thrown. 
A subclass must provide an implementation of this method. 


Returns:
the next byte of data, or -1 if the end of the stream is reached. 
Throws: 
IOException - if an I/O error occurs.



ну и пишеться тоже smile)), соответственно BYTE. 
Код


public abstract void write(int b)
                    throws IOExceptionWrites the specified byte to this output stream. The general contract for write is that one byte is written to the output stream. The byte to be written is the eight low-order bits of the argument b. The 24 high-order bits of b are ignored. 
Subclasses of OutputStream must provide an implementation for this method. 


Parameters:
b - the byte. 
Throws: 
IOException - if an I/O error occurs. In particular, an IOException may be thrown if the output stream has been closed.



Это сообщение отредактировал(а) Dancer - 23.8.2006, 09:34


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
Nemesis
Дата 23.8.2006, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 20.2.2005
Где: Москва

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



javastic, не подумай, что я не поверил тебе ) просто пишем одно и то же получается.. 

Цитата(javastic @  23.8.2006,  10:08 Найти цитируемый пост)
Объем наоборот вырастит. А надо чтобы данные не побились. Например когда отсылается атачмент вместе с электронным письмом он кодируется алгоритмом  mime64.

Вот так дела... а не дашь пару ссылочек полезных, где про это почитать можно?


Dancer, спасибо, сегодня попробую перевести в byte, забавно ))
--------------------
PM MAIL   Вверх
javastic
Дата 24.8.2006, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1214
Регистрация: 18.3.2005
Где: St.Petersburg

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



Вот алгоритм base64, можешь из него выкинуть методы декодирования (оставив только кодировку) чтобы занимал в твоей проге меньше места. А декодировать будешь на серверной стороне.

Код

/* Copyright (c) 2002,2003, Stefan Haustein, Oberhausen, Rhld., Germany
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or
 * sell copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The  above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 * IN THE SOFTWARE. */

package Files;

import java.io.*;

public class Base64 {

    static final char[] charTab =
        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
            .toCharArray();

    public static String encode(byte[] data) {
        return encode(data, 0, data.length, null).toString();
    }

    /** Encodes the part of the given byte array denoted by start and
    len to the Base64 format.  The encoded data is appended to the
    given StringBuffer. If no StringBuffer is given, a new one is
    created automatically. The StringBuffer is the return value of
    this method. */

    public static StringBuffer encode(
        byte[] data,
        int start,
        int len,
        StringBuffer buf) {

        if (buf == null)
            buf = new StringBuffer(data.length * 3 / 2);

        int end = len - 3;
        int i = start;
        int n = 0;

        while (i <= end) {
            int d =
                ((((int) data[i]) & 0x0ff) << 16)
                    | ((((int) data[i + 1]) & 0x0ff) << 8)
                    | (((int) data[i + 2]) & 0x0ff);

            buf.append(charTab[(d >> 18) & 63]);
            buf.append(charTab[(d >> 12) & 63]);
            buf.append(charTab[(d >> 6) & 63]);
            buf.append(charTab[d & 63]);

            i += 3;

            if (n++ >= 14) {
                n = 0;
                buf.append("\r\n");
            }
        }

        if (i == start + len - 2) {
            int d =
                ((((int) data[i]) & 0x0ff) << 16)
                    | ((((int) data[i + 1]) & 255) << 8);

            buf.append(charTab[(d >> 18) & 63]);
            buf.append(charTab[(d >> 12) & 63]);
            buf.append(charTab[(d >> 6) & 63]);
            buf.append("=");
        }
        else if (i == start + len - 1) {
            int d = (((int) data[i]) & 0x0ff) << 16;

            buf.append(charTab[(d >> 18) & 63]);
            buf.append(charTab[(d >> 12) & 63]);
            buf.append("==");
        }

        return buf;
    }

    static int decode(char c) {

        if (c >= 'A' && c <= 'Z')
            return ((int) c) - 65;
        else if (c >= 'a' && c <= 'z')
            return ((int) c) - 97 + 26;
        else if (c >= '0' && c <= '9')
            return ((int) c) - 48 + 26 + 26;
        else
            switch (c) {
                case '+' :
                    return 62;
                case '/' :
                    return 63;
                case '=' :
                    return 0;
                default :
                    throw new RuntimeException(
                        "unexpected code: " + c);
            }
    }

    /** Decodes the given Base64 encoded String to a new byte array.
    The byte array holding the decoded data is returned. */

    public static byte[] decode(String s) {

        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {

            decode(s, bos);

        }
        catch (IOException e) {
            throw new RuntimeException();
        }
        return bos.toByteArray();
    }

    public static void decode(String s, OutputStream os)
        throws IOException {
        int i = 0;

        int len = s.length();

        while (true) {
            while (i < len && s.charAt(i) <= ' ')
                i++;

            if (i == len)
                break;

            int tri =
                (decode(s.charAt(i)) << 18)
                    + (decode(s.charAt(i + 1)) << 12)
                    + (decode(s.charAt(i + 2)) << 6)
                    + (decode(s.charAt(i + 3)));


            os.write((tri >> 16) & 255);
            if (s.charAt(i + 2) == '=')
                break;
            os.write((tri >> 8) & 255);
            if (s.charAt(i + 3) == '=')
                break;
            os.write(tri & 255);

            i += 4;
        }
    }
}



--------------------
01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011
scjp, mcp 
PM MAIL WWW ICQ   Вверх
Nemesis
Дата 24.8.2006, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 20.2.2005
Где: Москва

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



javastic, спасибо большое!!!
--------------------
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

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


 




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


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

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