|
05.09.2012, 18:52
|
#16
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
В данной версии нет, но в принципе возможно. Если актуально - может найду время дописать.
|
(Offline)
|
|
05.09.2012, 20:15
|
#17
|
Оператор ЭВМ
Регистрация: 12.01.2011
Адрес: Воронеж
Сообщений: 32
Написано одно полезное сообщение
|
Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
Очень актуально )
Думаю, за это буду признателен не только я.
Библиотека хорошо себя зарекомендовала в работе, но поддержки нескольких соединений не хватает.
|
(Offline)
|
|
14.09.2012, 02:03
|
#18
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
Собрал тестовый вариант библиотеки для работы с несколькими соединениями, чисто для проверки концепции. Работа отличается только тем, что перед началом работы с функциями библиотеки нужно вызвать метод binsock3.init(int cnt);, где cnt - требуемое количество подключений. Также, каждая функция работы с соединением (т.е. все функции, кроме отладочных) имеет еще один (последний) параметр (кроме указанных в документации), который определяет индекс подключения, к которому идет обращение.
Библиотеку пока не протестировал, поскольку не на чем, а на эмуляторе не работает (это не глюк библиотеки, поскольку старая версия также не работает, видимо, система не дает эмулятору доступ в сеть).
И есть еще один момент - возможно, операции с разными соединениями придется разносить в разные потоки, хотя может и так будет работать.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
14.09.2012, 13:02
|
#19
|
Оператор ЭВМ
Регистрация: 12.01.2011
Адрес: Воронеж
Сообщений: 32
Написано одно полезное сообщение
|
Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
Отличная новость )
Протестирую и отпишусь.
Кстати предыдущая версия библиотеки у меня работает на эмуляторе SJBoy.
Только нужно добавить в исключения файрволлу.
|
(Offline)
|
|
01.11.2013, 13:17
|
#20
|
Оператор ЭВМ
Регистрация: 12.01.2011
Адрес: Воронеж
Сообщений: 32
Написано одно полезное сообщение
|
Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
ViNT, в описании указано, что read_bin возвращает массив байт из входящего потока или null в случае ошибки.
В MP константы null не зарезервировано.
Как интерпретировать это значение? - как пустую строку?
__________________
На западном фронте без перемен...
|
(Offline)
|
|
01.11.2013, 13:19
|
#21
|
Оператор ЭВМ
Регистрация: 12.01.2011
Адрес: Воронеж
Сообщений: 32
Написано одно полезное сообщение
|
Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
P.S. Забыл тогда отписаться про либу с несколькими подключениями - при тесте проблем не возникало.
__________________
На западном фронте без перемен...
|
(Offline)
|
|
05.11.2013, 23:07
|
#22
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
Сообщение от Gonzo
ViNT, в описании указано, что read_bin возвращает массив байт из входящего потока или null в случае ошибки.
В MP константы null не зарезервировано.
Как интерпретировать это значение? - как пустую строку?
|
Когда писал библиотеку, как-то подзабыл, что в MP нет null'a. Надо подумать, как это лучше реализовать.
|
(Offline)
|
|
05.11.2013, 23:45
|
#23
|
Оператор ЭВМ
Регистрация: 12.01.2011
Адрес: Воронеж
Сообщений: 32
Написано одно полезное сообщение
|
Ответ: 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.
Может так и сделать? - в случае ошибки возвращать пустую строку и ввести запрет на вызов чтения данных нулевой длины?
__________________
На западном фронте без перемен...
|
(Offline)
|
|
05.11.2013, 23:49
|
#24
|
Оператор ЭВМ
Регистрация: 12.01.2011
Адрес: Воронеж
Сообщений: 32
Написано одно полезное сообщение
|
Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
Прицепляю библиотеку, которую использую
__________________
На западном фронте без перемен...
|
(Offline)
|
|
06.11.2013, 00:37
|
#25
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
В принципе, если вариант с возвращением пустой строки устраивает - выкладываю пересобранную версию. Отличается только тем, что из read_bin возвращает пустую строку вместо null. Хотя, надо будет подумать над более удобным решением.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
06.11.2013, 01:29
|
#26
|
Оператор ЭВМ
Регистрация: 12.01.2011
Адрес: Воронеж
Сообщений: 32
Написано одно полезное сообщение
|
Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
Вполне устраивает. Спасибо
__________________
На западном фронте без перемен...
|
(Offline)
|
|
10.11.2013, 20:15
|
#27
|
Оператор ЭВМ
Регистрация: 12.01.2011
Адрес: Воронеж
Сообщений: 32
Написано одно полезное сообщение
|
Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
ViNT, важный вопрос:
должны ли функции binsock.available и binsock.read_bin возвращать ошибки и выбрасывать эксепшны, если соединение было потеряно ранее (закрыто сервером или пропала сеть)?
__________________
На западном фронте без перемен...
|
(Offline)
|
|
10.11.2013, 23:36
|
#28
|
Оператор ЭВМ
Регистрация: 12.01.2011
Адрес: Воронеж
Сообщений: 32
Написано одно полезное сообщение
|
Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
Декомпилировал класс. Насколько я могу судить, в binsock.available, если соединение ранее пропало (и соотв. inpustream уже нет), т.е. is == null, то функция будет возвращать 0, будто все норм:
public static int available() { if (is != null) { try { return is.available(); } catch (Exception e) { err(e, 2, ""); return -1; } } return 0; }
Поправьте, пожалуйста.
---
Я до этого с Java совсем не работал - не подскажите как компиллить классы для j2me? какие пакеты нужны и т.д.
Главным образом интересуют зависимости для данной библиотеки.
__________________
На западном фронте без перемен...
|
(Offline)
|
|
10.11.2013, 23:47
|
#29
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
В этом случае is не будет равен null (он будет по прежнему указывать на объект потока, наличие которого не зависит от состояния соединения), а будет сгенерирован IOException, который будет интерпретирован блоком try...catch как ERR_AVAILERROR.
Библиотеки компилить проще всего в NetBeans, единственный момент - в новых версиях у них там какая-то проблема с подключением J2ME, я решал ручным указанием пути к J2ME WTK (хотя обычно он не нужен). Можно компилить в самом WTK, но это неудобно. Конкретно эта библиотека использует только стандартные пакеты J2ME.
|
(Offline)
|
|
11.11.2013, 00:18
|
#30
|
Оператор ЭВМ
Регистрация: 12.01.2011
Адрес: Воронеж
Сообщений: 32
Написано одно полезное сообщение
|
Ответ: Lib_binsock: прием/отправка бинарных данных через сокет
А в каких случаях 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 с компиляцией уже завтра тогда буду разбираться на свежую голову )
__________________
На западном фронте без перемен...
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:47.
|