2013-02-07 37 views
1

我正在开发一个更大的项目,哪个部分是为摩托罗拉MC9596扫描仪创建软件,但我使用FTP服务器阻止数据传输通过GPRS移动连接。从WinCE设备拨号RAS

为此,我使用OpenNETCF。

问题是我无法拨打我创建的条目的连接。这意味着有在设备的电话簿,TEST1 2个条目 - 由装置产生的,我配置上手动设备和TEST2连接,其中创建编程方式使用:

private const string CONNAME = "test2"; 
private const string PHONENR = "~GPRS!xxx.xxx-xxxxxxxx.eu"; 
private const string USER = "xx"; 
private const string PWD = "xx"; 
private const string DEVICE_TYPE = "modem"; 
private const string DEVICE_NAME = "Cellular Line"; 

private void createConnectionEntry() 
{ 
    RasEntry rasEnt = new RasEntry() 
    { 
     Name = CONNAME, 
     CountryCode = 0, 
     AreaCode = "", 
     PhoneNumber = PHONENR, 
     DeviceName = DEVICE_NAME, 
     DeviceType = DEVICE_TYPE, 
     IPAddress = "0.0.0.0", 
     IPAddressDns = "0.0.0.0" 
    }; 

    /*rasEnt.Options |= (int)ConnectionOptions.UseCountryAndAreaCodes; 
    rasEnt.Options |= (int)ConnectionOptions.UseLogonCredentials;*/ 
    rasEnt.Options = 4194304; 

    RasDialParams dialParams = new RasDialParams() 
    { 
     UserName = USER, 
     Password = PWD, 
    }; 

    cEntry = Ras.CreateEntry(rasEnt, dialParams); 
} 

注“rasEnt.Options = 4194304”,究竟是什么硬编码,通过手动配置连接来精确复制设备生成的设置。 奇怪的是,如果我在调试模式下比较2个条目,两者是相等的 - 这意味着所有属性都是相等的,唯一的区别是名称。我相信这一点,也用反射来比较对象。

我用拨号连接:在Test2的 “未知” 的错误的情况下

RasError re = cEntry.Dial(false, new RasDialParams(CONNAME, USER, PWD)); 

在Test1的情况下,我得到的 “成功”。

你能帮我解决那个难题吗?

+0

你的设置中的APN在哪里? –

+0

我向源代码添加了更多细节。 – HoGo

+0

如果删除test1和test2会发生什么情况,然后只重新创建test2?那么test2能工作吗? –

回答

1

现在我已经手动添加了必要的注册表项 - 只是在创建连接之前和之后检查了注册表中的差异。不是一个干净的解决方案,但没有找到其他的。它似乎工作稳定,我可以通过这种方式拨打连接。我会看到,如果在生产阶段没问题。

0

主要问题是通过代码拨号:当我试图我遇到其他问题。虽然上面的代码来自Hogo,但是有很多提示可以用于无障碍编码:

首先,以下提示需要您手动拨号连接并通过运行任何网站来测试您的Internet IE浏览器。如果互联网正在工作,那么你很高兴通过代码拨打它。

做手工:

请使用名为“GPRS”一个新的连接“网络和拨号连接”(使用此链接:http://www.e-consystems.com/gprs.asp)。如果您使用的SIM卡更改baudarate从19200到115200.连接它并检查互联网是否工作。

通过拨号代码:

  1. 当你创建了一个名为 “GPRS” 手动,3个寄存器GPRS文件夹下建立的连接。 (HKEY_CURRENT_USER \ Comm \ RasBook \ GPRS)。这些文件夹无法正常显示。要求将应用程序安装在读取寄存器的PDA中。如果您确实需要根据Windows版本下载它们,则无需查看内部内容。

  2. 3个寄存器中只有两个寄存器是相关的(DevCfg和Entry)。手动拨号并连接到互联网后,将DevCfg和Entry寄存器中的数据复制到文本文件(DevCfg.txt和Entry.txt),以便稍后您可以复制这些值。要从寄存器复制到文本文件,请使用RegQueryValueEx(...),RegOpenKeyEx(..),RegSetValueEx(...)。)和其他相关功能(见http://msdn.microsoft.com/en-us/library/windows/desktop/ms724911%28v=vs.85%29.aspx

例如: 读寄存器和写入文本文件:

public static bool ReadRegString(IntPtr hKey, string lpszSubKey, string lpValueName) 
    { 
     try 
     { 
      string str = ""; 
      byte[] lpData = new byte[684]; 
      uint lpcbValue = 684; 
      uint dwType = Utils.REG_BINARY; 
      IntPtr phkResult = new IntPtr(); 
      Utils.RegOpenKeyEx(hKey, lpszSubKey, 0, 0, ref phkResult); 
      if (phkResult != IntPtr.Zero) 
      { 
       int x = Utils.RegQueryValueEx(phkResult, lpValueName, 0, ref dwType, lpData, ref lpcbValue); 
       StringBuilder sb = new StringBuilder(); 
       for (int i = 0; i < 684; i++) 
       { 
        if (i != 683) 
         sb.Append(lpData[i].ToString() + "|"); 
        else 
         sb.Append(lpData[i].ToString()); 
       } 
       using (System.IO.StreamWriter outfile = new System.IO.StreamWriter(filePath)) 
       { 
        outfile.Write(sb.ToString()); 
       } 
       Utils.RegCloseKey(phkResult); 
     } 
    } 

if (Utils.ReadRegString(Utils.HKEY_CURRENT_USER, @"Comm\RasBook\GPRS", "DevCfg")) 
     { 
      textBoxSysVers.Text = "Succeeded Make Text File."; 

     } 
  • 现在通过代码化妆拨号我们使用RASENTRY的(加neccessary库;检查HOGO的答案Making GPRS Connection programmatically using C# for windows CE 5.0?
  • 一)创建RASENTRY对象

    b)从文本文件复制数据创建“Entry.txt和DevCfg.txt” 分别注册Entry和DevCfg。

    c)拨RasError重新= cEntry.Dial(...)

    对于〔实施例:

    private const string CONNAME = "GPRS"; 
        private const string PHONENR = "*99#"; 
        private const string USER = "xx"; 
        private const string PWD = "xx"; 
        private const string DEVICE_TYPE = "modem"; 
        private const string DEVICE_NAME = "Cellular Line"; 
    
    { RasEntry cEntry = new RasEntry() 
        { 
         Name = CONNAME, 
         CountryCode = 91, 
         AreaCode = "120", 
         PhoneNumber = PHONENR, 
         DeviceName = DEVICE_NAME, 
         DeviceType = DEVICE_TYPE, 
         IPAddress = "0.0.0.0", 
         IPAddressDns = "0.0.0.0",Options=4194304 
        }; 
    
         RasDialParams dialParams = new RasDialParams() 
         { 
          UserName = USER, 
          Password = PWD, 
          EntryName = CONNAME, 
          Domain = " " 
         } 
    
         if (Utils.WriteRegValue(Utils.HKEY_CURRENT_USER, @"Comm\RasBook\GPRS", "DevCfg","Entry",3)) 
         { 
          RasError re = cEntry.Dial(false, new RasDialParams(CONNAME, USER, PWD)); 
    
          RasError rs = re; 
          textBoxInfo.Text = re.ToString() + " : Dial Status"; 
          if(rs.ToString()=="Success") 
          textBoxInfo.Text = cEntry.Status.State.ToString() + " : Dial Status"; 
         } 
        } 
    
    public static Boolean WriteRegValue(IntPtr hKey, string lpszSubKey, string lpValueName1, string lpValueName1,uint dwType) 
        { 
         int iOper = 1; 
         filePath = @"`enter code here`\DevCfg.txt"; 
         IntPtr phkResult = new IntPtr(); 
         Utils.RegOpenKeyEx(hKey, lpszSubKey, 0, 0, ref phkResult); 
         if (phkResult == IntPtr.Zero) 
         { 
          int iSecurity = 0; 
          int dwDisp = 0; 
          RegCreateKeyEx(hKey, lpszSubKey, 0, null, 0, 0, ref iSecurity, ref phkResult, ref dwDisp); 
         } 
         if (phkResult != IntPtr.Zero) 
         { 
          byte[] bytes = new byte[684]; 
          string[] text = new string[684]; 
          using (System.IO.StreamReader streamReader = new System.IO.StreamReader(filePath, Encoding.UTF8)) 
          { 
           text = streamReader.ReadToEnd().Split('|'); 
          } 
          for (int i = 0; i < 684; i++) 
          { 
           bytes[i] = Convert.ToByte(Convert.ToInt32(text[i])); 
          } 
          iOper = Utils.RegSetValueEx(phkResult, lpValueName1, 0, dwType, bytes, (uint)bytes.Length); 
          Utils.RegCloseKey(phkResult); 
    

    }}

    //与之相似做到这一点从lpValueName2

    }}

    hogo的代码和这个之间的区别是RasEntry没有在这里创建。它来自寄存器。我在创造物体和建议时遇到困难。希望它有助于:)