Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с ConnMgrReleaseConnection WM6+Samsung

62K
21 июля 2010 года
test1c
2 / / 21.07.2010
День добрый.
Есть проблема, не могу нормально разорвать соединение ЖПРС на телефоне при связке КПК WM6 и телефона модели Samsung
Подключаюсь к Интернет через телефон (bluetooth) со своего приложения при помощи ConnMgrEstablishConnectionSync
Происходит коннект, отправка данных и дисконект. ЖПРС на телефоне и передача данных на КПК после команды ConnMgrReleaseConnection отключается. Тестировал на аппаратах
ipaq 2410 (WM 2003 SE)
ipaq 2490 (WM5)
в связке со многими моделями телефонов (в том числе и с samsung). И все было ОК.
Когда попытался проделать это с КПК
ipaq 114 (WM6) и телефон samsung (c5212 и e250) то первый коннект проходит. Потом после команды ConnMgrEstablishConnectionSync на телефоне пропадает значок соединения с GPRS, а на КПК не пропадает соединение. При попытке еще раз соединится, и отправить данные, долго висит и вываливается с ошибками. Тестировал с разными моделями Nokia и Motorola - все работает. Буду благодарен помощи в решении этой проблемы.

Net CF 2
VS 2008
VBNet

Код:
Imports System.IO
Imports System.Threading
Imports System.Runtime.InteropServices

Module Module_GPRSConnection

    Public Function GPRSConnectionSetup() As Boolean

        Dim t As String = System.IO.Path.AltDirectorySeparatorChar.ToString() + System.IO.Path.DirectorySeparatorChar.ToString()
        Dim url As String = "www.msn.com"
        GPRSConnectionSetup = GPRSConnection.Setup(Uri.UriSchemeHttp + Uri.SchemeDelimiter + url + Path.AltDirectorySeparatorChar)

    End Function

    Public Sub GPRSConnectionRelease()
        GPRSConnection.ReleaseAll()
    End Sub


    Public Class GPRSConnection

        Const S_OK As Integer = 0
        Const CONNMGR_PARAM_GUIDDESTNET As Integer = &H1
        Const CONNMGR_FLAG_PROXY_HTTP As Integer = &H1
        Const CONNMGR_PRIORITY_USERINTERACTIVE As Integer = &H8000
        Const INFINITE As UInteger = &HFFFFFFFFUI
        Const CONNMGR_STATUS_CONNECTED As Integer = &H10
        Shared ht As New Hashtable()

        Shared Sub New()
            Dim mre As New ManualResetEvent(False)
            mre.Handle = ConnMgrApiReadyEvent()
            mre.WaitOne()
            CloseHandle(mre.Handle)
        End Sub

        Protected Overrides Sub Finalize()
            Try
                ReleaseAll()
            Finally
                MyBase.Finalize()
            End Try
        End Sub

        Public Shared Function Setup(ByVal url As Uri) As Boolean
            Return Setup(url.ToString())
        End Function

        Public Shared Function Setup(ByVal urlStr As String) As Boolean
            Dim ci As New ConnectionInfo()
            Dim phConnection As IntPtr = IntPtr.Zero
            Dim status As Integer = 0

            If ht(urlStr) IsNot Nothing Then
                Return True
            End If

            If ConnMgrMapURL(urlStr, ci.guidDestNet, IntPtr.Zero) <> S_OK Then
                Return False
            End If

            ci.cbSize = CUInt(Marshal.SizeOf(ci))
            ci.dwParams = CONNMGR_PARAM_GUIDDESTNET
            ci.dwFlags = CONNMGR_FLAG_PROXY_HTTP
            ci.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE
            ci.bExclusive = 0
            ci.bDisabled = 0
            ci.hWnd = IntPtr.Zero
            ci.uMsg = 0
            ci.lParam = 0

            If ConnMgrEstablishConnectionSync(ci, phConnection, INFINITE, status) <> S_OK AndAlso status <> CONNMGR_STATUS_CONNECTED Then
                Return False
            End If

            ht(urlStr) = phConnection
            Return True
        End Function

        Public Shared Function Release(ByVal url As Uri) As Boolean
            Return Release(url.ToString())
        End Function

        Public Shared Function Release(ByVal urlStr As String) As Boolean
            Return Release(urlStr, True)
        End Function

        Private Shared Function Release(ByVal urlStr As String, ByVal removeNode As Boolean) As Boolean
            Dim res As Boolean = True
            Dim ph As IntPtr = IntPtr.Zero
            If ht(urlStr) Is Nothing Then
                Return True
            End If
            ph = DirectCast(ht(urlStr), IntPtr)
            If ConnMgrReleaseConnection(ph, 0) <> S_OK Then
                res = False
            End If
            CloseHandle(ph)
            If removeNode Then
                ht.Remove(urlStr)
            End If
            Return res
        End Function

        Public Shared Sub ReleaseAll()
            For Each de As DictionaryEntry In ht
                Release(DirectCast(de.Key, String), False)
            Next
            ht.Clear()
        End Sub

        <StructLayout(LayoutKind.Sequential)> _
        Public Structure ConnectionInfo
            Public cbSize As Integer
            Public dwParams As Integer
            Public dwFlags As Integer
            Public dwPriority As Integer
            Public bExclusive As Integer
            Public bDisabled As Integer
            Public guidDestNet As Guid
            Public hWnd As IntPtr
            Public uMsg As Integer
            Public lParam As Integer
            Public ulMaxCost As Integer
            Public ulMinRcvBw As Integer
            Public ulMaxConnLatency As Integer
        End Structure

        <DllImport("cellcore.dll")> _
        Private Shared Function ConnMgrMapURL(ByVal pwszURL As String, ByRef pguid As Guid, ByVal pdwIndex As IntPtr) As Integer
        End Function

        <DllImport("cellcore.dll")> _
        Private Shared Function ConnMgrEstablishConnectionSync(ByRef ci As ConnectionInfo, ByRef phConnection As IntPtr, ByVal dwTimeout As UInteger, ByRef pdwStatus As Integer) As Integer
        End Function

        <DllImport("cellcore.dll")> _
        Private Shared Function ConnMgrApiReadyEvent() As IntPtr
        End Function

        <DllImport("cellcore.dll")> _
        Private Shared Function ConnMgrReleaseConnection(ByVal hConnection As IntPtr, ByVal bCache As Integer) As Integer
        End Function

        <DllImport("coredll.dll")> _
        Private Shared Function CloseHandle(ByVal hObject As IntPtr) As Integer
        End Function
    End Class


End Module
62K
22 июля 2010 года
ibes
1 / / 22.07.2010
Не знаю может тебе это поможет. Я не программист , администратор. Контора в работе использует КПК, буквально сегодня столкнулся с ранее не встречавшимся глюком, сразу у двоих сотрудников произошли изменеия в связке КПК-телефон.
Один поменял телефон с сонерика на самсунг 3310 (вроде, цифирь не запоминал, много их) + iPAQ 114.
У второго КПК 2190 увели, пришлось выдавать новый - 114-й. У него самсунг 2110 ( ну помню что на 2)
И сразу стал наблюдаться описаный тобой глюк. Развлекуха шла около двух часов, опытным путем выяснили, что второй раз зайти в интернет с КПК после отключения можно только перегрузив самсунги (телефоны). В конторе около 30 разнопородных КПК на wm5 и wm6, глюк идет только в связке Самсунг - iPAQ 114, но это сочетание только 2 раза и встретилось. С другими телефонами КПК работают нормально, самсунги нормально работают с 2190 c wm5
62K
23 июля 2010 года
test1c
2 / / 21.07.2010
Спасибо за помощь. Значит бага ((не) или (не только)) у меня в коде.
Я повисшее соединение отключаю либо путем перезапуска блютуса, или через отключить активные соединения в манагере блютус.
После этого программа снова может коннектица.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог