Gprs bağlantı açıp kapama

C# (C Sharp) veya Java ile ilgili konuları buraya yazabilirsiniz.
Cevapla
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Gprs bağlantı açıp kapama

Mesaj gönderen unicorn64 »

Merhaba arkadaşlar.
c# kullanarak el termineline server client program yazıyoruz.
dataların aktarımı için gprs bağlantısı yapmamız gerekti.
internette biraz araştırdıktan sonra aşağıda verdiğim class ı buldum.
Kullanımı şu şekilde:

Kod: Tümünü seç

Boolean GPRSBaglandi = GPRSConnection.Setup("http://www.google.com");
bu kodla aktif internet bağlantısı yoksa (google a erişemiyorsa) gprs bağlantısı kuruyor ve gayet güzel çalışıyor.

ancak işim bittikten sonra gprs bağlantısını kapatmak istiyorum ve anladığım kadarıyla

Kod: Tümünü seç

GPRSConnection.Release("http://www.google.com");
dediğimde bağlantıyı kesmesi gerekiyor. ama bi türlü olmadı. bağlantıyı kesmiyor. herhangi bir hata da vermiyor.

bu classı kullanarak nasıl bağlantıyı kapatabilirim (birşeyleri yanlış mı yapıyorum acaba..) yada gprs bağlantısı kesme hakkında fikri olan varmı??

Kod: Tümünü seç


using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Runtime.InteropServices;
using System.Threading;


namespace Mobetra
{
    public class GPRSConnection
    {
        const int S_OK = 0;
        const uint CONNMGR_PARAM_GUIDDESTNET = 0x1;
        const uint CONNMGR_FLAG_PROXY_HTTP = 0x1;
        const uint CONNMGR_PRIORITY_USERINTERACTIVE = 0x08000;
        const uint INFINITE = 0xffffffff;
        const uint CONNMGR_STATUS_CONNECTED = 0x10;
        static Hashtable ht = new Hashtable();

        static GPRSConnection()
        {
            ManualResetEvent mre = new ManualResetEvent(false);
            mre.Handle = ConnMgrApiReadyEvent();
            mre.WaitOne();
            CloseHandle(mre.Handle);
        }

        ~GPRSConnection()
        {
            ReleaseAll();
        }

        public static bool Setup(Uri url)
        {
            return Setup(url.ToString());
        }

        public static bool Setup(string urlStr)
        {
            ConnectionInfo ci = new ConnectionInfo();
            IntPtr phConnection = IntPtr.Zero;
            uint status = 0;

            if (ht[urlStr] != null)
                return true;

            if (ConnMgrMapURL(urlStr, ref ci.guidDestNet, IntPtr.Zero) != S_OK)
                return false;

            ci.cbSize = (uint)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(ref ci, ref phConnection, INFINITE, ref status) != S_OK &&
                status != CONNMGR_STATUS_CONNECTED)
                return false;

            ht[urlStr] = phConnection;
            return true;
        }

        public static bool Release(Uri url)
        {
            return Release(url.ToString());
        }

        public static bool Release(string urlStr)
        {
            return Release(urlStr, true);
        }

        private static bool Release(string urlStr, bool removeNode)
        {
            bool res = true;
            IntPtr ph = IntPtr.Zero;
            if (ht[urlStr] == null)
                return true;
            ph = (IntPtr)ht[urlStr];
            if (ConnMgrReleaseConnection(ph, 0) != S_OK)
                res = false;
            CloseHandle(ph);
            if (removeNode)
                ht.Remove(urlStr);
            return res;
        }

        public static void ReleaseAll()
        {
            foreach (DictionaryEntry de in ht)
            {
                Release((string)de.Key, false);
            }
            ht.Clear();
        }

        [StructLayout(LayoutKind.Sequential)]
        public struct ConnectionInfo
        {
            public uint cbSize;
            public uint dwParams;
            public uint dwFlags;
            public uint dwPriority;
            public int bExclusive;
            public int bDisabled;
            public Guid guidDestNet;
            public IntPtr hWnd;
            public uint uMsg;
            public uint lParam;
            public uint ulMaxCost;
            public uint ulMinRcvBw;
            public uint ulMaxConnLatency;
        }

        [DllImport("cellcore.dll")]
        private static extern int ConnMgrMapURL(string pwszURL, ref Guid pguid, IntPtr pdwIndex);

        [DllImport("cellcore.dll")]
        private static extern int ConnMgrEstablishConnectionSync(ref ConnectionInfo ci, ref IntPtr phConnection, uint dwTimeout, ref uint pdwStatus);

        [DllImport("cellcore.dll")]
        private static extern IntPtr ConnMgrApiReadyEvent();

        [DllImport("cellcore.dll")]
        private static extern int ConnMgrReleaseConnection(IntPtr hConnection, int bCache);

        [DllImport("coredll.dll")]
        private static extern int CloseHandle(IntPtr hObject);
    }
}

Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1526
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

Yanlış bilmiyorsam gprs bağlantısını açmak ve kapamak cihaz ın insiyatifinde..
bir istek geldiğinde açar ve belli bir süre istek gelmezse kapatır..
zira Mobile 6.0 kullanıyorum ve cihazı restart ettiğimde gprs logosunun yandığını görüyorum belli bir süre sonra kapanıyor..
ayrıca bağlı kalmasınında pek bir sakıncası yok çünkü veri iletişimi olmazsa zaten herhangi bir ücrete tabi değilsiniz :wink:
Resim

..::|YeşilMavi|::..
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Mesaj gönderen unicorn64 »

peki gprs bağlantısının durumunu algılamam mümkün mü??

ben programdan bağlantıyı sağladım,işim bitince kapatabilsem bağlantıyı sorun yok ama kapatamadığımda, eğer kullanıcı kendisi bağlantıyı kapatırsa bu durumda sıkıntı oluşuyor.
normalde gprs bağlantısı kurmadan önce kullanıcıya gprs bağlanacak onaylıyormusunuz tarzında sorup onaylanırsa bağlantı kuruyorum.
ancak dışardan bağlantı kesilmişse ben hala bağlantı var zannettiğimden soru sorulmuyor.
yani gprs bağlantısındakidurum değişikliğini yakalamam lazım...
necatiaydin
Üye
Mesajlar: 6
Kayıt: 26 Mar 2004 08:54
Konum: İstanbul

Re: Gprs bağlantı açıp kapama

Mesaj gönderen necatiaydin »

Merhaba,
SIM kartın seri numarası alan bir program yazıyorum. "cellcore.dll" ihtiyacım var. Net'de bulamadım.
Olan arkadaşlar gönderebilir mi?
Cevapla