WINCE下的GPRS拨号连接(一)
来源:互联网 发布:恢复iphone软件 编辑:程序博客网 时间:2024/05/21 09:25
WINCE下的GPRS拨号连接,
一、拨号函数:RasDial(IntPtr dialExtensions, IntPtr phoneBookPath,IntPtr rasDialParam,uint NotifierType,IntPtr notifier,ref IntPtr pRasConn ) ,函数返回值类型为uint,成功返回0。
二、断开连接的函数:RasHangUp(IntPtr pRasConn),函数返回值类型为uint,成功返回0.
三、列举当前已经建立的活动的连接的函数:RasEnumConnections([In, Out] _RASCONN[] lprasconn, ref UInt32 lpcb, ref UInt32 lpcConnections),函数返回值类似为uint32,参数的结构体类型下文再说。
在wince5.0系统上调试成功,注意
1、 r = RasDial(IntPtr.Zero, IntPtr.Zero, (IntPtr)pAddr, 0, IntPtr.Zero, ref RasConn);函数返回0值,代表成功联网,但是必须拿掉USB才可以正常显示网页。也就是说,上午时不可以用USB与PC同步。
2、同样,如果先USB与PC同步后RasDial,发送数据到服务器也收不到。
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace Wince_CLR_RAS
{
public class CLR_RAS
{
#region 引用coredll
[DllImport("coredll.dll")]
private static extern uint RasDial
(
IntPtr dialExtensions,
IntPtr phoneBookPath,
IntPtr rasDialParam,
uint NotifierType,
IntPtr notifier,
ref IntPtr pRasConn
);
[DllImport("coredll.dll")]
private static extern uint RasHangUp(IntPtr pRasConn);
[DllImport("coredll.dll", CharSet = CharSet.Unicode)]
internal static extern UInt32 RasEnumConnections([In, Out] _RASCONN[] lprasconn, ref UInt32 lpcb, ref UInt32 lpcConnections);
const int RAS_MaxEntryName = 20;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
internal struct _RASCONN
{
private UInt32 m_size;
private IntPtr m_hrasconn;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = RAS_MaxEntryName + 1)]
public char[] m_entryName;
public IntPtr ConnectionHandle { get { return m_hrasconn; } }
public string EntryName { get { return new string(m_entryName).TrimEnd(new char[] { '\0' }); } }
public static _RASCONN CreateStruct()
{
_RASCONN obj = new _RASCONN();
obj.m_size = System.Convert.ToUInt32(Marshal.SizeOf(typeof(_RASCONN)));
obj.m_hrasconn = IntPtr.Zero;
obj.m_entryName = new char[RAS_MaxEntryName + 1];
return obj;
}
}
#endregion
#region 列举已建立的活动连接
/// <summary>
/// 列举已建立的活动连接
/// </summary>
/// <returns></returns>
private static _RASCONN[] EnumerateConnections()
{
_RASCONN[] rasconn;
UInt32 size = 0, noelements = 0;
size = System.Convert.ToUInt32(Marshal.SizeOf((rasconn = new _RASCONN[1])[0] = _RASCONN.CreateStruct()));
if (RasEnumConnections(rasconn, ref size, ref noelements) != 0x00)
{
// size = System.Convert.ToUInt32(Marshal.SizeOf((rasconn = new _RASCONN[size / Marshal.SizeOf(typeof(_RASCONN))])[0] = _RASCONN.CreateStruct()) * rasconn.Length);
rasconn = new _RASCONN[size / Marshal.SizeOf(typeof(_RASCONN))];
rasconn[0] = _RASCONN.CreateStruct();
size = System.Convert.ToUInt32(Marshal.SizeOf(rasconn[0]) * rasconn.Length);
if (RasEnumConnections(rasconn, ref size, ref noelements) != 0x00) { rasconn = null; }
}
return rasconn;
}
#endregion
/// <summary>
/// GPRS拨号连接
/// </summary>
/// <param name="EntryName">拨号连接的名称</param>
/// <param name="UserName">用户名</param>
/// <param name="Password">密码</param>
/// <param name="RasConn">返回的句柄</param>
/// <returns></returns>
unsafe private static uint myRasDial(string EntryName, string UserName, string Password, out IntPtr RasConn)
{
/*
EntryName ,UserName,Password - same as in RASDIALPARAMS structure (see
MSDN)
*/
uint r = 0;
RasConn = IntPtr.Zero;
byte[] bRASDIALPARAMS = new byte[1464];
fixed (byte* pAddr = bRASDIALPARAMS)
{
byte* pCurrent = pAddr;
Marshal.WriteInt32((IntPtr)pCurrent, bRASDIALPARAMS.Length);
pCurrent += 4;
foreach (byte b in Encoding.Unicode.GetBytes(EntryName))
{
Marshal.WriteByte((IntPtr)pCurrent, b);
pCurrent++;
}
pCurrent = pAddr + 0x192;//0x192 - offset for RASDIALPARAMS.UserName
foreach (byte b in Encoding.Unicode.GetBytes(UserName))
{
Marshal.WriteByte((IntPtr)pCurrent, b);
pCurrent++;
}
pCurrent = pAddr + 0x394;//0x394 - offset for RASDIALPARAMS.Password
foreach (byte b in Encoding.Unicode.GetBytes(Password))
{
Marshal.WriteByte((IntPtr)pCurrent, b);
pCurrent++;
}
r = RasDial(IntPtr.Zero, IntPtr.Zero, (IntPtr)pAddr, 0, IntPtr.Zero, ref RasConn);
}
return r;
}
/// <summary>
/// 断开所有活动的连接
/// </summary>
public static void DicConnectAll()
{
_RASCONN[] ran = EnumerateConnections();
for (int i = 0; i < ran.Length; i++)
{
if (ran[i].EntryName =="GPRS")
{
RasHangUp(ran[i].ConnectionHandle);
}
}
}
/// <summary>
/// 所有活动的连接
/// </summary>
public static string ListConnectAll()
{
string strCon = "";
_RASCONN[] ran = EnumerateConnections();
for (int i = 0; i < ran.Length; i++)
{
strCon +=ran[i].EntryName+",";
}
return strCon;
}
/// <summary>
/// 断开已建立的连接
/// </summary>
/// <param name="mEntryName">已建立的活动连接的名称</param>
/// <returns></returns>
public static bool disConnect(string mEntryName)
{
_RASCONN[] ran = EnumerateConnections();
for (int i = 0; i < ran.Length; i++)
{
if (ran[i].EntryName == mEntryName)
{
if (RasHangUp(ran[i].ConnectionHandle) == 0)
return true;
else
return false;
}
}
return false; //表示没有此连接
}
/// <summary>
/// 判断是否已经建立连接
/// </summary>
/// <param name="mEntryName">要查询状态的拨号连接的名称</param>
/// <returns></returns>
public static bool GPRSIsCon(string mEntryName)
{
_RASCONN[] ran = EnumerateConnections();
for (int i = 0; i < ran.Length; i++)
{
if (ran[i].EntryName == mEntryName)
return true;
}
return false; //表示没有此连接
}
public static bool GPRSConnectNet(string mEntryName)
{
IntPtr hRaon;
uint res = myRasDial(mEntryName, "", "", out hRaon);
if (res == 0)
return true;
else
return false;
}
}
}
- WINCE下的GPRS拨号连接(一)
- WINCE下的GPRS拨号连接(二)
- WinCE下GPRS拨号连接助手
- WinCE下GPRS拨号
- mobile和wince下的gprs拨号
- wince下实现GPRS上网,程序控制拨号
- wince下实现GPRS上网,程序控制拨号 .
- WINCE下的RAS拨号连接(二)
- WINCE下的RAS拨号连接
- WinCE 下 RAS 拨号连接的建立和拨号过程
- WinCE 下 RAS 拨号连接的建立和拨号过程
- 关于WinCE下MC55使用Unimodem进行GPRS拨号,拨上出现断开连接,检查波特率的问题的另一种可能情况
- gprs 自动拨号 wince ppc
- gprs 自动拨号 wince ppc
- 自动连接GPRS拨号
- 嵌入式linux下的GPRS拨号脚本
- Linux下GPRS拨号功能的实现
- WinCE 下 RAS 拨号连接的建立和拨号过程----代码示例
- 2012-02-08-2
- Android学习记录
- LINUX使用虚拟化一定要注意的基本条件
- C# Ext关于前台调用后台的方法
- C# 入门经典
- WINCE下的GPRS拨号连接(一)
- 从零开始学习OpenGL ES集合
- Runtime 与 Process
- DOS的串口编程2
- group by后使用rollup子句总结
- 代码重构笔记I
- Android 8款开源游戏引擎
- 华西附二院预约挂号须知
- 高雅 div 样式