forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   Lib_binsock: прием/отправка бинарных данных через сокет (http://forum.boolean.name/showthread.php?t=8960)

ViNT 05.09.2012 18:52

Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
 
В данной версии нет, но в принципе возможно. Если актуально - может найду время дописать.

Gonzo 05.09.2012 20:15

Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
 
Очень актуально )
Думаю, за это буду признателен не только я.
Библиотека хорошо себя зарекомендовала в работе, но поддержки нескольких соединений не хватает.

ViNT 14.09.2012 02:03

Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
 
Вложений: 1
Собрал тестовый вариант библиотеки для работы с несколькими соединениями, чисто для проверки концепции. Работа отличается только тем, что перед началом работы с функциями библиотеки нужно вызвать метод binsock3.init(int cnt);, где cnt - требуемое количество подключений. Также, каждая функция работы с соединением (т.е. все функции, кроме отладочных) имеет еще один (последний) параметр (кроме указанных в документации), который определяет индекс подключения, к которому идет обращение.

Библиотеку пока не протестировал, поскольку не на чем, а на эмуляторе не работает (это не глюк библиотеки, поскольку старая версия также не работает, видимо, система не дает эмулятору доступ в сеть).

И есть еще один момент - возможно, операции с разными соединениями придется разносить в разные потоки, хотя может и так будет работать.

Gonzo 14.09.2012 13:02

Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
 
Отличная новость )
Протестирую и отпишусь.
Кстати предыдущая версия библиотеки у меня работает на эмуляторе SJBoy.
Только нужно добавить в исключения файрволлу.

Gonzo 01.11.2013 13:17

Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
 
ViNT, в описании указано, что read_bin возвращает массив байт из входящего потока или null в случае ошибки.
В MP константы null не зарезервировано.
Как интерпретировать это значение? - как пустую строку?

Gonzo 01.11.2013 13:19

Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
 
P.S. Забыл тогда отписаться про либу с несколькими подключениями - при тесте проблем не возникало.

ViNT 05.11.2013 23:07

Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
 
Цитата:

Сообщение от Gonzo (Сообщение 269541)
ViNT, в описании указано, что read_bin возвращает массив байт из входящего потока или null в случае ошибки.
В MP константы null не зарезервировано.
Как интерпретировать это значение? - как пустую строку?

Когда писал библиотеку, как-то подзабыл, что в MP нет null'a. Надо подумать, как это лучше реализовать.

Gonzo 05.11.2013 23:45

Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
 
Я пока использую такую обертку:
Код:

function ReadData(DataLength: Integer): String;
//прием строки
var
        l: Integer;
        s, tmp: String;
begin
  l := DataLength;
  s := '';
  while l > 0 do
  begin
                tmp := binsock.read_bin(l);
                if tmp = '' then
                begin
                        s := 'ERROR';
                        Break;
                end;
                s := s + tmp;
                l := binsock.available;
                if l = -1 then
                begin
                        s := 'ERROR';
                        Break;
                end;
  end;
  ReadData := s;
end;

Но я никогда и не вызываю чтение данных с DataLength = 0.
Может так и сделать? - в случае ошибки возвращать пустую строку и ввести запрет на вызов чтения данных нулевой длины?

Gonzo 05.11.2013 23:49

Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
 
Вложений: 1
Прицепляю библиотеку, которую использую

ViNT 06.11.2013 00:37

Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
 
Вложений: 1
В принципе, если вариант с возвращением пустой строки устраивает - выкладываю пересобранную версию. Отличается только тем, что из read_bin возвращает пустую строку вместо null. Хотя, надо будет подумать над более удобным решением.

Gonzo 06.11.2013 01:29

Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
 
Вполне устраивает. Спасибо

Gonzo 10.11.2013 20:15

Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
 
ViNT, важный вопрос:
должны ли функции binsock.available и binsock.read_bin возвращать ошибки и выбрасывать эксепшны, если соединение было потеряно ранее (закрыто сервером или пропала сеть)?

Gonzo 10.11.2013 23:36

Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
 
Декомпилировал класс. Насколько я могу судить, в binsock.available, если соединение ранее пропало (и соотв. inpustream уже нет), т.е. is == null, то функция будет возвращать 0, будто все норм:
PHP код:

public static int available() {
    if (
is != null) {
      try {
        return 
is.available();
      } catch (
Exception e) {
        
err(e2"");
        return -
1;
      }
    }
    return 
0;
  } 

Поправьте, пожалуйста.
---
Я до этого с Java совсем не работал - не подскажите как компиллить классы для j2me? какие пакеты нужны и т.д.
Главным образом интересуют зависимости для данной библиотеки.

ViNT 10.11.2013 23:47

Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
 
В этом случае is не будет равен null (он будет по прежнему указывать на объект потока, наличие которого не зависит от состояния соединения), а будет сгенерирован IOException, который будет интерпретирован блоком try...catch как ERR_AVAILERROR.

Библиотеки компилить проще всего в NetBeans, единственный момент - в новых версиях у них там какая-то проблема с подключением J2ME, я решал ручным указанием пути к J2ME WTK (хотя обычно он не нужен). Можно компилить в самом WTK, но это неудобно. Конкретно эта библиотека использует только стандартные пакеты J2ME.

Gonzo 11.11.2013 00:18

Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
 
Вложений: 1
А в каких случаях is станет null ? для чего эта проверка?
---------------
Нет нетбинса, но есть еклипс.
Попробовал скачать eclipse-me-sdk-plugins-uc.zip отсюда
http://www.oracle.com/technetwork/ja...sdk/index.html
но не встает.
---
пробую так же через консоль:
Код:

C:\Program Files\Java\jdk1.7.0_09\bin\Java_ME_platform_SDK_3.4>C:\PROGRA~1\Java\
JDK17~1.0_0\bin\javac.exe C:\PROGRA~1\Java\jdk1.7.0_09\bin\Java_ME_platform_SDK_
3.4\lib\Lib_binsock.java
C:\PROGRA~1\Java\jdk1.7.0_09\bin\Java_ME_platform_SDK_3.4\lib\Lib_binsock.java:3
: error: package javax.microedition.io does not exist
import javax.microedition.io.*;
^
C:\PROGRA~1\Java\jdk1.7.0_09\bin\Java_ME_platform_SDK_3.4\lib\Lib_binsock.java:7
: error: cannot find symbol
  private static SocketConnection con;
                ^
  symbol:  class SocketConnection
  location: class Lib_binsock
C:\PROGRA~1\Java\jdk1.7.0_09\bin\Java_ME_platform_SDK_3.4\lib\Lib_binsock.java:3
1: error: cannot find symbol
                M.onerror(sender, ex.toString(), msg, code);
                ^
  symbol:  variable M
  location: class Lib_binsock
C:\PROGRA~1\Java\jdk1.7.0_09\bin\Java_ME_platform_SDK_3.4\lib\Lib_binsock.java:4
6: error: cannot find symbol
            con = (SocketConnection)Connector.open(url);
                  ^
  symbol:  class SocketConnection
  location: class Lib_binsock
C:\PROGRA~1\Java\jdk1.7.0_09\bin\Java_ME_platform_SDK_3.4\lib\Lib_binsock.java:4
6: error: cannot find symbol
            con = (SocketConnection)Connector.open(url);
                                    ^
  symbol:  variable Connector
  location: class Lib_binsock
5 errors

----
Не могли бы Вы сейчас скомпилировать этот файл (прикладываю в архиве)? хотелось бы кое-что проверить - какая-то проблема последнее время странная. И дело то ли на сервере, то ли на клиенте - непонятно.
----
A с компиляцией уже завтра тогда буду разбираться на свежую голову )


Часовой пояс GMT +4, время: 11:54.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot