forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   Lib_socket (http://forum.boolean.name/showthread.php?t=2525)

Piligrim 29.11.2006 10:31

Re: Библиотеки
 
Вложений: 2
Пробуйте.

IVenoMI 29.11.2006 11:35

Re: Библиотеки
 
Возник вопрос такого плана:

1. При открытии сокета обмен данніми в асинхронном режиме?..

2. Немного не понял, как записывать данные в сокет для отправки... Через ИнпутСтрим?..

Piligrim 30.11.2006 21:59

Re: Библиотеки
 
1. есть ли что на приеме можно запросить, а отправка в любой момент.
2. пишет побайтно. если надо строку, могу сделать

Piligrim 08.12.2006 00:18

Re: Библиотеки
 
program Menu;
uses socket;
var
s: string;
b : integer;
begin
if socket.open('socket://mrim.mail.ru:2042')<>0 then
Debug('Error');
while socket.available=0 do begin
delay(100);
end;
b := 33;
while (socket.available<>0) or (b>32) do begin
b := socket.read;
s := s + chr(b);
end;
DrawText(s, 0, 0);
repaint;
delay(5000);
end.

IVenoMI 25.12.2006 03:28

Re: Библиотеки
 
pilgrim, уважаемый, а библиотека работает по протоколу UDP или TCP/IP ?

Бибилиотека использует протокол tcp. (Piligrim)

aleshka 25.12.2006 16:03

Re: Библиотеки
 
Цитата:

Сообщение от pilgrim
program Menu;
uses socket;

Кстати такой вопрос. В эмуляторе все работает замечательно, все принимается и отправляется без проблем. Но тот же апплет в телефоне работать отказывается. Стартует, но при подключении, вот здесь
socket.open('socket://...') выдает код ошибки -1. При этом сам телефон даже не выдает запрос на разрешение доступа к сети передачи данных. Что это может быть? Телефон настроен как надо, и все остальные Интернет-приложения работают :)

IVenoMI 21.06.2007 13:29

Re: Lib_socket
 
А можно таки реализовать поддержку отправки строки в вышеуказанной библиотеке?..

aleshka 25.07.2007 09:57

Re: Lib_socket
 
Вложений: 2
C отправкой строк и количеством принятой/отправленой инфы.

Kurdt 25.07.2007 15:04

Re: Lib_socket
 
Вложений: 2
чтото не хочет отправлять почту через сокет смтп, можете глянуть что не так.. ?

aleshka 26.07.2007 10:30

Re: Lib_socket
 
Вложений: 2
ну еще бы хотел ))))))
во первых: где символ перевода каретки? и что за \r\n? меняем везде
SendState:= Socket.WriteStr('HELO there\r\n');
на
SendState:= Socket.WriteStr('helo there' + chr(10));

во вторых: где чтение и анализ ответа сервера или хотя бы простые задержки между командами? добавляем где надо
Delay(2000);
while Socket.Available > 0 do RecvString:= RecvString + Chr(Socket.Read);

ну и в третьих и четвертых: на сервере может быть авторизация. и у тебя на внешнем шлюзе может быть закрыт 25 порт во избежание.
вобщем лови пример, код конечно ужасный, но у меня в локалке с локальным почтовиком все работает.

ViNT 09.08.2007 22:51

Re: Lib_socket
 
А можно с помощъю этой либы подключаться к серверу по IP-адресу не в локальной сети, а в интернет?

Piligrim 10.08.2007 11:55

Re: Lib_socket
 
Конечно можно. Не совсем понимаю о чем идет речь. чем IP адрес локальной сети отличается от интернет?

ViNT 10.08.2007 14:21

Re: Lib_socket
 
Я просто не правильно выразился.
Суть состоит в том, чтобы подключиться к удаленной машине на определенный порт. На компе запущена программа, которая прослушивает этот порт(сокет в асинхронном режиме).
Мидлет должен подключиться к компу, передать ему данные и закрыть соединение.

Код:


program Therminal;
uses socket;
var
s: string;
b:integer;
begin

if socket.open('socket://10.100.2.202:1030')<>0 then
Debug('Error');
//зависает здесь, даже если убрать цикл
while socket.available=0 do begin
delay(100);
end;

delay(1000);

b:=socket.write(80);
drawtext('sent',10,15);
socket.close;
drawtext('closed',0,30);
delay(10000);
end.

На эмуляторе все работает, а на мобиле(Moto c650) заклинивает.

Хотя судя по логу MIDWay ошибок нет:
Код:

AMS: VM_APPLICATION_STATE_CHANGED, 0
->AMS_VM_SynchronizeStates(): desired state=272281572, stable=0
<-AMS_VM_SynchronizeStates(): desired state=272281572, stable=0
AMS: VM_APPLICATION_STATE_CHANGED, 10
->AMS_VM_SynchronizeStates(): desired state=272281572, stable=0
<-AMS_VM_SynchronizeStates(): desired state=272281572, stable=0
AMS: VM_APPLICATION_STATE_CHANGED, 20
->AMS_VM_SynchronizeStates(): desired state=272281572, stable=0
<-AMS_VM_SynchronizeStates(): desired state=272281572, stable=1
KJAVA Key Event: 22; 0
[Socket] open0()
[ProxyMan] NET_ParseResource no protocol specified
[ProxyMan] NET_ParseResource host:10.100.2.202
[ProxyMan] NET_ParseResource port:1030
[Socket] NET_CreateTcpProxy(resource:0x3fdbbe0, nextProtocol:0)
KJAVA Key Event: 22; 1
[ProxyMan] NET_ProcessProxyMsg(suapiType:0x821b1, msgHandler:0)
[Socket] NET_TcpNetworkEvent(ind=532913, msg=1205679c, index=0)
[Socket] NET_TcpNetworkEvent proxy create success proxyId=1
[Socket] net_SetProxyAttributes(index:0, setLinkAttributes:1 )
[DnsIp] NET_GetStaticDnsIp DNS_IP:202.056.231.117
[Profile] NET_GetProfileInfo(profileIndex:0, profile:12067986)
[Socket] net_SetProxyAttributes - line=0 csd_number= apn=internet.mts.ru user=mts pwd=mts
[ProxyMan] NET_ProcessProxyMsg(suapiType:0x821b4, msgHandler:0)
[Socket] NET_TcpNetworkEvent(ind=532916, msg=12056964, index=0)
[Socket] NET_TcpNetworkEvent proxy set attribute success proxyId=1

//Зависает здесь
//Далее нажимаю "отбой"

VB: inside JkDeviceStopVibration()
->AMS_VM_ChangeDesiredState(): 272281780
->AMS_VM_SynchronizeStates(): desired state=272281572, stable=0
<-AMS_VM_SynchronizeStates(): desired state=272281572, stable=0
VB: inside JkDeviceStopVibration()
VB: JkDeviceStopBacklightFlash()
AMS: VM_APPLICATION_STATE_CHANGED, 21
VB: VMproxyResetBacklight()
VB: JkDeviceStopBacklightFlash()
->AMS_VM_SynchronizeStates(): desired state=272281572, stable=0
<-AMS_VM_SynchronizeStates(): desired state=272281572, stable=0
AMS: VM_APPLICATION_STATE_CHANGED, 1
->AMS_VM_SynchronizeStates(): desired state=272281572, stable=0
<-AMS_VM_SynchronizeStates(): desired state=272281572, stable=1
->AMS_VM_ChangeDesiredState(): 272281780
->AMS_VM_SynchronizeStates(): desired state=272281572, stable=0
<-AMS_VM_SynchronizeStates(): desired state=272281572, stable=0
AMS: VM_APPLICATION_STATE_CHANGED, 2
AMS: VM_APPLICATION_STATE_CHANGED, 23
VB: inside JkDeviceStopVibration()
AMS: VM_APPLICATION_STATE_CHANGED, 3
VB: JkDeviceStopBacklightFlash()
AMS: AMS_VM_START_RETURNED, 1
->AMS_VM_SynchronizeStates(): desired state=272281572, stable=0
<-AMS_VM_SynchronizeStates(): desired state=272281572, stable=1
[Socket] NET_ResetTcpSockets()
[ProxyMan] NET_DeallocateEntry destroy proxy profile_index:0
->AMS_VM_SynchronizeStates(): desired state=272281572, stable=1
<-AMS_VM_SynchronizeStates(): desired state=272281572, stable=1
[JkHttp] NET_HttpInteractionEvent(index:0, indication:5, data:0)
[JkHttp] NET_HttpInteractionEvent state:0
[JkHttp] NET_HttpInteractionEvent FREE_TABLE_EVENT
VB: JkDeviceStopBacklightFlash()
->AMS_VM_SynchronizeStates(): desired state=272281572, stable=1
<-AMS_VM_SynchronizeStates(): desired state=272281572, stable=1
AMS: AMS_SUITE_DATA_SIZE, 5439
AMS: MSM_ST_WRREC
DATAFLOW: 1
AMS: AMS_HEAP_RELEASED_TR


Piligrim 10.08.2007 17:38

Re: Lib_socket
 
судя по логу, собственно соединение устанавливается, но ничего не прилетает. Может сервер буферирует отправку?

ViNT 10.08.2007 18:38

Re: Lib_socket
 
Цитата:

Сообщение от pilgrim
судя по логу, собственно соединение устанавливается, но ничего не прилетает. Может сервер буферирует отправку?

Может, только как с этим бороться?

ViNT 12.08.2007 22:26

Re: Lib_socket
 
Дело в том, что подключение к серверной программе не устанавливается.

cHeRsAnYa 10.01.2008 22:08

Ответ: Lib_socket
 
Как отправить данные методом POST на сервер?

Piligrim 10.01.2008 22:15

Ответ: Lib_socket
 
Для этого можно воспользоваться стандартными http функциями МР, но в них есть ошибка как раз в части POST запроса. Смотри http://forum.boolean.name/showthread.php?t=5546

Stalk 11.02.2008 18:13

Re: Lib_socket
 
А можно ли этот запрос отправить именно через эту библиотеку сокетов и получить ответ сервера? http функции не катят, нужно именно через сокеты

Piligrim 11.02.2008 18:50

Ответ: Lib_socket
 
ява-машина не даст подключиться по сокетам используя 80 или 443 порт.

odd 04.04.2008 08:29

Ответ: Lib_socket
 
А можно открыть на мобиле порт и прослушивать его в асинхронном режиме. Т.е. сделать сервер?

И ещё. Как узнать собственный IP номер на мобильном?

Piligrim 04.04.2008 10:00

Ответ: Lib_socket
 
В MIDP2 есть класс ServerSocketConnection. Он позволяет создать серверное соединение и ждать подключения.
У него есть метод getLocalAdress(), которая возвращает IP адрес сервера. Единственная сложность, что адрес назначается динамически и его надо сообщать клиенту каким-то образом.
PS: на некоторых моделях можно адрес спросить через System.getProperty("microedition.hostname") ;

WizardJIOCb 23.10.2008 22:04

Ответ: Lib_socket
 
спс за либу

Vovochka 30.10.2008 13:55

Re: Lib_socket
 
Вобщем таакая проблемма, нужно коннектится к серверу, онКоннект отправить строку с логинолм и паролем, и в ответ ловить инфу.

Так вот... Работает на телефонах всех кроме НОКИА. Притом разных моделей от 3220,3230 до N80.

Устанавливается GPRS соединение без проблемм с запросом все как положенно, а потом в момент когда нужно ловить данные ничего не приходит.

Грешу на знак доллара. ВОбщем уже не знаю даже что и думать...Код прилагаю, помогайте люди кто могёт!!!

Код:

  Login := formGetText(nameField);
  Pass  := formGetText(passField);
 
//Открываем соединение
  OpenState:= Socket.Open('socket://XXX.XXX.XXX.XXX:Port');
 
  SendString := '$LOGIN<'+length(Login)+'>'+Login+'$PASS<' +length(Pass) +'>'+Pass;

  if OpenState = 0 then
                    BEGIN
                        delay(100);
//                      SendState:= Socket.WriteStr(SendString);
                        SendState:= Socket.WriteStr(SendString+chr(10)+chr(13));
                        resField := formAddTextField('',SendString,100,TF_ANY);
                       
                    END
                  else
                    begin
                      Debug('Error');
                                      end;
//
//
//Далее цикл чтения с сокета инфы.
//
//


Fialka 02.12.2008 13:18

Ответ: Lib_socket
 
Цитата:

Сообщение от pilgrim (Сообщение 76970)
ява-машина не даст подключиться по сокетам используя 80 или 443 порт.

Поясните, плз! Т.е., как я понял, при помощи сокетов НЕЛЬЗЯ скачать страницу с сайта?

Fialka 03.12.2008 00:00

Ответ: Lib_socket
 
Вот че я накопал: (офф. описание про мою моторолу)
Цитата:

Untrusted applications will use the normal HttpConnection and HttpsConnection APIs
to access web and secure web services. There are no restrictions on web server port
numbers through these interfaces. The implementations augment the protocol so
that web servers can identify untrusted applications. The following will be implemented:
· The implementation of HttpConnection and HttpsConnection will include
a separate User-Agent header with the Product-Token
"UNTRUSTED/1.0".User-Agent headers supplied by the application will
not be deleted.
· The implementation of SocketConnection using TCP sockets will throw
java.lang.SecurityException when an untrusted MIDlet suite attempts to
connect on ports 80 and 8080 (http) and 443 (https).
· The implementation of SecureConnection using TCP sockets will throw
java.lang.SecurityException when an untrusted MIDlet suites attempts
to connect on port 443 (https).
· The implementation of the method DatagramConnection.send will throw
java.lang.SecurityException when an untrusted MIDlet suite attempts to
send datagrams to any of the ports 9200-9203 (WAP Gateway).
· The above requirements should be applied regardless of the API used to
access the network. For example, the
javax.microedition.io.Connector.open and
javax.microedition.media.Manager.createPlayer methods should throw
java.lang.SecurityException if access is attempted to these port
numbers through a means other than the normal HttpConnection and
HttpsConnection APIs.

Piligrim 03.12.2008 01:12

Ответ: Lib_socket
 
ну я так и написал. много ли вы видели подписанных приложений?
а страницу сайта можно скачать с помощью HttpConnection

SDancer 03.12.2008 23:44

Ответ: Lib_socket
 
Можно ли вместо socket:// использовать comm:// для подключения к com порту ? У меня не получается

ViNT 03.12.2008 23:56

Ответ: Lib_socket
 
Цитата:

Сообщение от SDancer (Сообщение 91583)
Можно ли вместо socket:// использовать comm:// для подключения к com порту ? У меня не получается

Конечно нельзя, там совершенно разные классы работают. Для кома где-то либа отдельная была, можно найти в сборнике odd'а

Phantom 04.12.2008 05:45

Ответ: Lib_socket
 
Сколько же я нервов потратил, пока пытался заставить свой хостген (это типа программа для накрутки wap партнёрок, счётчиков, каталогов и т. п.) передать юзер агент без АНТРАСТЕДА... Ужос... Сокеты меня быстро обломали, с эмулятора работало как надо, но потом оказалось, что мобила запрещает коннект на 80 порт. Пытался каким-нибудь хитрым способом обмануть JVM, например, прописать порт 000080 :-D - разумеется не вышло. При соединении по http к юзер агенту добавляется надпись UNTRUSTED, и как я только не пытался обмануть JVM!!! :-D Например, скармливал функции (название не помню), которая добавляет http-заголовок, почти целый (!!!) http-пакет, прикиньте, РАБОТАЕТ, но всё равно UNTRUSTED добавляется к заголовку User-agent... Пытался отправить два одинаковых заголовка, вместо одного. Бесполезно... И тут меня осенило. :-D (*зловещий смех*) Если я не могу обмануть JVM, значит нужно обмануть Апач!!! И представляете, у меня получилось!!! Тестировал на локале, на сборке "Денвер". Просто пишем User_agent вместо User-agent! Апач это кушает, а JVM и понятия не имеет, что мы передаём Юзер Агент. Только перед этим нужно вписать нормальный заголовок User-agent, а то JVM его может добавить сама после нашего фейкового юзер_агента. Протестировал значит я это дело на локале - работает. Для контрольного теста решил проверить на нормальном сервере. Залил скрипт на хост (хостинг http://zavisov.net/, никому не рекомендую, раньше был нормальный хостинг, а сейчас унылое г*вно), протестил... РАБОТАЕТ!!! Кто-нибудь представляет, что такое "Минута Абсолютного Счастья"? Это было именно оно!!! Так ещё бы, ведь я только что на*бал всех, и разработчиков самого известного сервера в мире, и разработчиков платформы Java!..

Падение было резким и стремительным. Я думал, я этого не переживу. Оказалось, что работоспособность всего вышенаписанного полностью зависит то ли от настроек сервера, то ли от версии апача, я толком не понял. Как раз по иронии судьбы оказалось, что Денвер и zavisov.net были настроены именно так. Но большинство серверов не поддаются на фейковый юзер агент. Больше скажу, кроме Денвера и zavisov.net я так и не видел ни одного хостинга, который бы проглатывал это... В общем, если у кого-то после прочтения этого поста появились какие-нибудь гениальные мысли по поводу глобального обмана JVM и/или Апача, то прошу поделиться ими. А то я на хостген уже забил, так как UNTRUSTED в юзер агенте палит всё действо, и после никому деньги не выплачивают :-D , а народ, который до сих пор пользуется хостгеном, каждый день пишет мне в асю и требует, чтобы всё работало :-D Вписал в сообщение антиспам бота, что забил на ХостГен, теперь пореже пишут =)

Пора переходить на Симбиан и Виндоус Мобаил, но мой Сименс С75 обидится...

Всем спасибо за внимание =)

odd 16.12.2008 01:41

Ответ: Lib_socket
 
Смешно, но для сименсов подписывать приложения проще пареной репы. Там сертификаты не защищены абсолютно ничем. Просто купи себе кабель и поставь себе программу-анлокер скрытых дисков. У самого был C75 и я его перехакал с головы до ног. Побольше бы таких телефонов. Но увы. Тебе же нужно чтоб у пользователей работало, а какой смысл от программы если она будет работать только на семёне и то инструкция по установке будет довольно длинной и расчитанной на опытного пользователя с нужным кабелем. Я уже тоже основательно обломал себе зубы на накрутке и так в итоге решения и не нашёл.
Да уж, SUN это вам не Microsoft. Уже более 15 лет прошло, а взломать до сих пор не могут.

Phantom 16.12.2008 09:06

Ответ: Lib_socket
 
Цитата:

Но увы. Тебе же нужно чтоб у пользователей работало, а какой смысл от программы если она будет работать только на семёне и то инструкция по установке будет довольно длинной и расчитанной на опытного пользователя с нужным кабелем.
Именно. Просто я сначала написал, а потом уже узнал про UNTRUSTED в User Agent.

vitalik1 22.12.2008 19:38

Ответ: Lib_socket
 
Сделайте пожалуйста возможность создавать сервер ( ServerSocketConnection ) и получать свой IP ( getLocalAdress() ).

Junk1 22.12.2008 22:48

Ответ: Lib_socket
 
Позволяет ли библиотека принимать строку?

vitalik1 24.12.2008 22:47

Ответ: Lib_socket
 
Можно двумя способами:
1)
PHP код:

function readstrstring;
var
   
sstring;
begin
   s
:='';
   while 
socket.available>do
      
s:=s+chr(socket.read);
   
readstr:=s;
end

2)
PHP код:

var
   
resresource;
   
linestring;
begin
   res
:=socket.get_stream;
   
line:=ReadLine(res);
end


temned 29.12.2008 21:26

Ответ: Lib_socket
 
парни, может кто виложит описание всех команд?

Serg153 08.01.2009 17:36

Ответ: Lib_socket
 
===
вот наткнулся в инете на небольшое описание сетевых возможностей:
===
Для работы с сетью в J2ME используется специальный MIDP API: Generic Connection Framework (GCF). Поддержка GCF осуществляется на уровне конфигурации. Этот набор интерфейсов расположен в пакете javax.microedition.io.

GCF не ограничивается поддержкой HTTP. Возможны и другие типы соединений:
HTTP | http://www.host.com: 8080
Socket | socket://host.com:80
Socket | Listener socket://:1234 -Сервер!!! на телефоне
Datagram Sender datagram://host.com:9001 - UDP передача
Datagram Listener datagram://: 9001 - UDP слушание...
File file:/myfile.txt
Comm Port comm:com0;baudrate=19200;parity=odd
===
Дейтаграммы
Разрабатывая долгое время Java программы, Вы вполне могли не сталкиваться с понятием датаграмма. По сравнению с обычным TCP соединением, дейтаграммы позволяют более быстро передавать данные. Самым распространенным протоколом дейтаграмм является User Datagram Protocol (UDP), однако, поскольку все протоколы дейтаграмм строятся на одних и тех же базовых принципах, GCF поддерживает их непосредственно.

В основе технологии дейтаграмм лежит передача данных без установки соединения. Дейтаграммы передаются в сеть "вслепую", то есть факт доставки письма адресату не проверяется. После того как сообщение отправлено, приложение уже не заботит его судьба. В случае если связь плохая, дейтаграмма вполне может не дойти до адресата. Если Вы отправляете несколько дейтаграмм, то совсем не факт, что они придут адресату в том порядке, в котором Вы их отправляли. Необходимая проверка может быть выполнена на уровне приложения.

Приведенный ниже пример показывает как можно создать дейтаграмму и передать ее по указанному IP адресу.

try {
DatagramConnection dgc = (DatagramConnection)
Connector.open("datagram://localhost:9001");
try {
byte[] payload = "Test Message".getBytes();
Datagram datagram =
dgc.newDatagram(payload, payload.length);
dgc.send(datagram);
} finally {
dgc.close();
}
} catch (IOException x) {
x.printStackTrace();
}


В примере создается дейтаграмма с текстом "Test Message", которая передается на порт 9001 локального устройства (телефон передает дейтаграмму сам себе).

Это приложение будет работать правильно, даже если у вас не запущена программа, прослушивающая порт 9001, поскольку сразу после отправления приложение забывает о дейтаграмме, не требуя от адресата никакого подтверждения.

Ниже приведен код приложения, получающего отправленную дейтаграмму:

try {
DatagramConnection dgc = (DatagramConnection)
Connector.open("datagram://:9001");
try {
int size = 100;
Datagram datagram = dgc.newDatagram(size);
dgc.receive(datagram);
System.out.println(
new String(datagram.getData()).trim());
} finally {
dgc.close();
}
} catch (IOException x){
x.printStackTrace();
}


В приведенном примере устанавливается соединение с портом 9001. Предполагается, что размер дейтаграммы не может превышать 100 байт. В случае превышения лишние символы просто обрезаются. После того как дейтаграмма создана, вызывается метод receive(), который переводит поток в состояние ожидания до тех пор, пока не будет получено сообщение. После получения из дейтаграммы извлекается полезная информация и выводится на печать.

Сокеты
Другим распространенным типом соединения является TCP сокет-соединение. Передача данных при работе с сокетами происходит на основе подключения. Это значит, что отправитель и получатель должны установить между собой канал связи для обмена данными. Это как звонок по телефону. Если ваш друг не снял трубку, Вы не сможете передать ему информацию. Использование сокетов подразумевает гарантированную доставку данных в том порядке, в котором они были отправлены.

Приведенный ниже код показывает, как организовать прослушивание порта.

try
{
ServerSocketConnection ssc = (ServerSocketConnection)
Connector.open("socket://:9002");
StreamConnection sc = null;
InputStream is = null;
try{
sc = ssc.acceptAndOpen();
is = sc.openInputStream();
int ch = 0;
StringBuffer sb = new StringBuffer();
while ((ch = is.read()) != -1){
sb.append((char)ch);
}
System.out.println(sb.toString());
} finally{
ssc.close();
sc.close();
is.close();
}
} catch (IOException x) {
x.printStackTrace();
}


В приведенном примере ServerSocketConnection открывает порт 9002. Этот тип соединения используется для единственной цели - прослушивания входящей сокет информации. После вызова метода acceptAndOpen() поток переходит в состояние ожидания. После того как соединение установлено, этот метод возвращает экземпляр класса SocketConnection. С этого момента данные можно считывать из входящего потока.

Ниже приведен код, который инициализирует соединение с клиентом.

try{
SocketConnection sc = (SocketConnection)
Connector.open("socket://localhost:9002");
OutputStream os = null;
try{
os = sc.openOutputStream();
byte[] data = "Hello from a socket!".getBytes();
os.write(data);
} finally{
sc.close();
os.close();
}
} catch (IOException x){
x.printStackTrace();
}


SocketConnection устанавливает соединение с 9002 портом локальной машины. Если соединение успешно установлено, OutputStream записывает сообщение в исходящий поток. Обратите внимание, для передачи данных сокетам нужен канал данных. В случае если клиентское приложение не запущенно и не прослушивает порт, программа вернет ошибку.
====

вот... можно ли , на основе вышенаписанного - дополнить библиотеку сокетов...
или лучше добавить ещё 3 библиотеки - по аналогии с сокетной..
2/сокет-сервер
3/Udp-клиент
4/Udp-сервер
?
===
гдето читал что в Jad можно прописать автозапуск мидлет по событию....
в том числе и по УДП сигналу...

Piligrim 08.01.2009 17:58

Ответ: Lib_socket
 
UDP лучше не пользовать, особенно с нашим качеством связи.
Добавить ServerSocketConnection не сложно, раз уж вопрос возник, сделаю.
По вопросу автозапуска библиотека уже есть. Правда думаю, что сетевые события пройдут только к подписанному приложению.

Serg153 09.01.2009 14:45

Ответ: Lib_socket
 
дааа.. и если возможно - то реализовать сокет в отдельном Потоке...
и как бы чтоб оттуда выдавался статус текущего соеденения
кажется сперва телефон регестрируется у оператора связи,
затем уже подключается к указаному хосту...
и тогда был бы вызов из сокет
open(String url); которая ответила 2(идёт соеденение с сервером)
st_sct()-статус сокета :
(2)-идёт соеденение
(1)соеденение состоялось
(-1)соеденение неудачное
и.. если Соеденение с оператором идёт очень долго - это определит сам пользователь в своей проге - то была б возможность - выключить Поток с прогой соеденения...
чтото типа такого... может и сумбурно... :=)

Serg153 10.01.2009 09:36

Ответ: Lib_socket
 
байда какаято полоучается :-(
с эмулятора с компа всё нормально - и в сети и в инете - на сервер и передаёт и получает инфу..

а с телефона... зависает на открытии сокета - минут 5 висит.. и отключается....
- кто пробовал - может чтото подделать надо? типа сперва Сайт любой по шттп открыть а уж потом сокет..????

PS - щас вот глянул прогу кепермобиле - так там сокет немного по другому открывается
если в либе
import javax.microedition.io.Connector;
import javax.microedition.io.SocketConnection;
...
public static int open(String url) {
try{
c = (SocketConnection) Connector.open(url); i = c.openInputStream(); o = c.openOutputStream(); } tch(Exception ex) {return -1;}
return 0;
===
то в кепере
import java.io.DataInputStream;
import java.io.DataOutputStream;
import javax.microedition.io.*;
...
private StreamConnection a_javax_microedition_io_StreamConnection_fld;
private Thread a_java_lang_Thread_fld;
private DataOutputStream a_java_io_DataOutputStream_fld;
private DataInputStream a_java_io_DataInputStream_fld;
...
try
{
a_javax_microedition_io_StreamConnection_fld = (StreamConnection)Connector.open("socket://194.67.27.110:10116");
a_java_io_DataOutputStream_fld = a_javax_microedition_io_StreamConnection_fld.openD ataOutputStream();
byte abyte0[] = s2.getBytes();
a_java_io_DataOutputStream_fld.write(abyte0);
a_java_io_DataOutputStream_fld.flush();
}

т.е. сокет открывается через (StreamConnection)...

====
может быть так переделать либу? (возможно будет работать с телефона)

Piligrim 10.01.2009 12:02

Ответ: Lib_socket
 
Не будет. StreamConnection просто родитель SocketConnection и у него нет некоторых методов последнего. Если бы дело было в этом, то не висело бы 5 минут а вылетало сразу из-за отсутствия класса SocketConnection

Serg153 10.01.2009 14:28

Ответ: Lib_socket
 
а в чём ещё может быть проблема?
другие программки - тот же мобильный кошелёк - в инет выходят...

Serg153 10.01.2009 16:55

Ответ: Lib_socket
 
ЗЫ - а может всётаки проблема в реальном телефоне изза того что необходимо выполнять Соеденения в отдельном потоке?
2piligrim - глянь на статью -
Многозадачность в JavaMe при HTTP соединении - http://x-coder.ru/index.php?newsid=84
может возможно библиотеку Lib_socket переделать в многопоточную?
и также там реализовать анимаию??? ну типа такого :=)

Serg153 10.01.2009 18:04

Ответ: Lib_socket
 
ДАА.. =) зависание на телефоне при открытии соедения - наверняка возникает изза того что Соеденение происходит в Основном потоке...
щас с помощью местной либы по многопоточности - запускал соеденение - Получилось ! :=)... правда приём данных неполучился...
но на сервак Данные идут хорошо =)....
---

Piligrim 10.01.2009 23:18

Ответ: Lib_socket
 
Про то что сетевые и интерфейсные нити нужно разделять я знаю. Просто в МР это приходится делать через ...
Сделаю.

Serg153 16.01.2009 23:29

Ответ: Lib_socket
 
2pilgrim - получилось ли реализовать сокеты в потоках?

Serg153 18.01.2009 00:50

Ответ: Lib_socket
 
:несколько моментов по использованию сокетов....
---
запускать открытие сервера в отдельном потоке...

регистрация в сети и подключение к серверу происходит примерно от 25 секунд и более..

приём мессаги также занимает от 12 до 25 и более секунд...
---
к примеру - я делаю игрушку - там есть регистрация клиента и получение от сервера кодов подтверждения 2 байта....
по времени подключение и передача запроса на сервер длилась около 43 секунд... а вот приём 2х байтов длился около 25 секунд....
---
затем я делал запрос на сервак о статусе игрока - передал 5 байт инфы о клиенте - в ответ ждал 20 байт... - ответ пришёл за 12 секунд...
===
в отдельном потоке желательно запустить анимацию - например песочные часики....
---
со стороны сервера желательно посылать первым байтом Длину передаваемого сообщения...
из 20 байт переданных мне сервером я получил 3мя порциями... 1 порция в 3 байта пришла через 4 секунды
15 байт пришло через 5 секунд
2 байта через 3 секунды....
сервак написанный на Дельфях в сети АДСЛ находился на Украине...
в Московском сервере отклик происходил на 1-3 секунды быстреее....

abcdef 18.01.2009 10:19

Ответ: Lib_socket
 
была такая проблемка...

если нужна либа с
java.io.DataInputStream;
java.io.DataOutputStream; можно взять в "основной форум - отправка e-mail pop3 (sources)" работает как в эмуляторе, так и в телефоне

Piligrim 18.01.2009 11:23

Ответ: Lib_socket
 
По поводу скоростей могу конечно поспорить. Если бы все обстояло так плохо, джим, агент и т.д. на телефонах никогда бы толком не заработали.
А в остальном по потокам все так и предполается сделать.

abcdef 18.01.2009 20:01

Ответ: Lib_socket
 
смотрите инфу по стеку протоколов TCP/IP при отправке данных они собираются в пакеты, например мы отправили несколько маленьких блоков, а ушли они в одном пакете, т.е. реальная отправка ждет заполнения пакета или таймаута, и считать нужно пакетами

Ultimat 28.03.2009 15:42

Ответ: Lib_socket
 
Я чет не понял че тут дискуссия закончилась? пол года назад? че уже ни кто этим не занимаеться? тема мне очень понравилась!!! я вот сделал сайт на php там чат есть люди общаються, хочу сделать ява чат еще для телефонов, через http соедтинение мне кажеться это не очень хорошая идея а вот через сокеты самое то, я прав? только куча вопросов, возникает. есть у кого нибудь простенький пример на пыхе( на хосте как это соединение устанавливать ). тут вообще живые есть? ))

Phantom 28.03.2009 20:12

Ответ: Lib_socket
 
Ultimat, Java не может коннектится через сокет на 80 порт! Делай по http.

Serg153 03.07.2009 20:38

Ответ: Lib_socket
 
Цитата:

pilgrim
------------------------------------------------------------
Про то что сетевые и интерфейсные нити нужно разделять я знаю.
Просто в МР это приходится делать через ...Сделаю.
2 pilgrim или ViNT - реализуйте пожалуйста, организацию соект соеденений в ОТДЕЛЬНОМ ПОТОКе.... а то на телефоне зависает при открытии сокет...
(в отдельный поток только Открытие соеденения....
заранее Спасибо.. :-)

Gonzo 13.08.2012 14:07

Ответ: Lib_socket
 
Возможно ли открытие одновременно более одного соединения?


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

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