Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BTHPROTO_RFCOMM 
:(
    Опции темы
zss
Дата 23.7.2009, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



не получается сбиндить сокет для bluetooth

Код

    SOCKET socket = ::socket (AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM);
    if (socket == INVALID_SOCKET)
    {
    }

        SOCKADDR_BTH address = {0};
    address.addressFamily       = AF_BTH;
    address.btAddr          = BTH_ADDR_NULL;
    address.serviceClassId  = SerialPortServiceClass_UUID; //GUID_NULL;
    address.port                = 1;


    if (bind (socket, (sockaddr *) &address, sizeof (address)) == SOCKET_ERROR)
    {
    }


WSAGetLastError = 10048

Перествавил модуль в другой usb - работает. Перегрузил компьютер - опять не работает.
Почему ? 
PM MAIL ICQ   Вверх
InvalidProperty
Дата 24.7.2009, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

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



WSAEADDRINUSE ( 10048 ) error happen on bind ( usually that only for 
servers )  , because of port socket try to bind() still in use ( after close 
by default port for 240sec still opened to receive late incoming  data

а вообще с блутусом не работал - не знаю, почему


--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
zss
Дата 24.7.2009, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(InvalidProperty @  24.7.2009,  07:51 Найти цитируемый пост)
WSAEADDRINUSE ( 10048 ) error happen on bind ( usually that only for 
servers )  , because of port socket try to bind() still in use ( after close 
by default port for 240sec still opened to receive late incoming  data

у меня это - "Обычно разрешается одно использование адреса сокета (протокол/сетевой адрес/порт)"

У меня конечно открывается еще и TCP сокет, но они не увязаны между собой по портам
PM MAIL ICQ   Вверх
InvalidProperty
Дата 24.7.2009, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

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



Цитата(zss @  24.7.2009,  08:59 Найти цитируемый пост)
у меня это - "Обычно разрешается одно использование адреса сокета (протокол/сетевой адрес/порт)"

это именно то, что написано в английском варианте.
в общем, нашел описание для линукс, но ты не боись, линукс и винда для сокетов одна херня. Почитай тут


--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
zss
Дата 24.7.2009, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(InvalidProperty @  24.7.2009,  09:07 Найти цитируемый пост)
в общем, нашел описание для линукс, но ты не боись, линукс и винда для сокетов одна херня. Почитай тут 

ну похоже на мое, только порт там = 0

Если я выставлю 0, то все работает, только клиент не может подключиться, т.к. ему нужен номер порта,
а минимальный порт = 1. Если же для сервера задавать порт, то проблема, описанная выше...
PM MAIL ICQ   Вверх
InvalidProperty
Дата 24.7.2009, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

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



товарищ! согласно мсдн тебе нужно на стороне сервера валидный порт, либо BT_PORT_ANY. На стороне клиента тебе нужно ставить 0 в качестве порта


--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
zss
Дата 24.7.2009, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(InvalidProperty @  24.7.2009,  10:38 Найти цитируемый пост)
товарищ! согласно мсдн тебе нужно на стороне сервера валидный порт, либо BT_PORT_ANY. На стороне клиента тебе нужно ставить 0 в качестве порта 

так работает, но я хотель задавать валидный порт, чтоб несколько приложений могли работать через один модуль.
А вот сервер на валидном порту не запускается (не биндится)
PM MAIL ICQ   Вверх
InvalidProperty
Дата 24.7.2009, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

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



к сожалению, сам я не занимался проблемами такого рода, но в мсдн написано
Цитата

On client applications, the port member must be zero to enable an appropriate local endpoint to be assigned

, что наводит меня на мысль, что клиент будет коннектиться к одному интерфейсу.
так же там написано
Цитата

The bind function does not automatically advertise the server application using the Bluetooth SDP; applications must call the WSASetService function to be found by remote Bluetooth applications.

ты это уже используешь?
для connect написано
Цитата

When using the SOCKADDR_BTH structure with the connect function, the following requirements apply:

    * The btAddr member must be a valid remote radio address.
    * For the serviceClassId member, if the port member is zero, the system attempts to use serviceClassId to resolve the remote port corresponding to the service. The service class is a normalized 128-bit GUID, defined by the Bluetooth specification. Common GUIDs are defined by the Bluetooth Assigned Numbers document. Alternatively, a unique GUID may be used for a domain-specific application.
    * The port member must be a valid remote port, or zero if the serviceClassId member is specified.

если порт не проходит можно попробовать через serviceClassId


--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
zss
Дата 24.7.2009, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(InvalidProperty @  24.7.2009,  11:26 Найти цитируемый пост)
ты это уже используешь?

да - после bind


Цитата(InvalidProperty @  24.7.2009,  11:26 Найти цитируемый пост)
если порт не проходит можно попробовать через serviceClassId

и это есть

Код

address.serviceClassId  = SerialPortServiceClass_UUID


может их вместе нельзя ?
PM MAIL ICQ   Вверх
InvalidProperty
Дата 24.7.2009, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

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



Цитата(zss @  24.7.2009,  11:30 Найти цитируемый пост)
может их вместе нельзя ? 

если под этим ты подразумеваешь вопрос "нельзя ли вместе использовать порт (ненулевой) и serviceClassId", то ответ следует прямо из MSDN
Цитата

For the serviceClassId member, if the port member is zero, the system attempts to use serviceClassId to resolve the remote port corresponding to the service

вердикт: нельзя. либо то, либо другое.

Добавлено через 2 минуты и 1 секунду
строго говоря можно, но сначала система будет проверять порт и только если он ненулевой, примется за serviceClassId


--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
zss
Дата 24.7.2009, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(InvalidProperty @  24.7.2009,  11:44 Найти цитируемый пост)
строго говоря можно, но сначала система будет проверять порт и только если он ненулевой, примется за serviceClassId 

значит можно smile

попробовал только порт - таже фигня. работает только с BT_PORT_ANY :(
PM MAIL ICQ   Вверх
InvalidProperty
Дата 24.7.2009, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

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



ну так если только с BT_PORT_ANY работает, то почему бы на клиенте не попробовать выставить нулевой порт и не задействовать serviceClassId? Еще раз повторю, что проблемами такого рода не занимался, но попробуй это сделать и выложи весь свой код, если не получится, будем вместе думать


--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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