WinCE程序通过套接字连接不上GPRS,高分求救

寒江易雪_王孙 2010-12-20 04:44:21
用的语言是C#,在CSDN上下载了别人分享的连接GPRS的代码,

/// <summary>
/// 建立连接
/// </summary>
/// <param name="nIndex"></param>
/// <returns></returns>
public bool EstablishConnection(uint nIndex)
{
ReleaseConnection();
// 得到正确的连接信息
CONNMGR_DESTINATION_INFO DestInfo = new CONNMGR_DESTINATION_INFO();
int hResult = ConnMgrEnumDestinations((int)nIndex, ref DestInfo);

if (hResult >= 0)
{
// 初始化连接结构
CONNMGR_CONNECTIONINFO ConnInfo = new CONNMGR_CONNECTIONINFO();

ConnInfo.cbSize = (uint)Marshal.SizeOf(ConnInfo);
ConnInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
ConnInfo.dwFlags = CONNMGR_FLAG_PROXY_HTTP | CONNMGR_FLAG_PROXY_WAP | CONNMGR_FLAG_PROXY_SOCKS4 | CONNMGR_FLAG_PROXY_SOCKS5;
ConnInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;
ConnInfo.guidDestNet = DestInfo.guid;
ConnInfo.bExclusive = 0;
ConnInfo.bDisabled = 0;

uint dwStatus = 0;
hResult = ConnMgrEstablishConnectionSync(ref ConnInfo, ref m_hConnection, 10 * 1000, ref dwStatus);
if (hResult < 0)
{
return false;
}
else
{
return true;
}
}
return false;
}
//执行先连接GPRS后,WM手机上显示出 正在连接GRPS...的字样,一会没了,我不确定是否真的通过手机卡连接上了GPRS
//然后我用TcpClient连接服务端,代码如下:
private void Connect(string toSStr)
{
try
{
if (_connectTimes == 10)
{
MessageBox.Show("连接超过10次未能正常连接,请检查网络!");
return;
}
_connectTimes++;
if (socket != null)
{
if (socket.Client.Client.Connected) return;
socket = null;
}
TcpClient cc = new TcpClient(AddressFamily.InterNetwork);
socket = new Mobile.Socket.SMSSocketClient(cc);//socket是封装的TcpClient的一个对象
//广域网IP和端口,这个连接服务端检测不到,线程不会到这里不走了吧?
socket.Connect("202.102.1.5", 8888);
socket.ReceiveData();
socket.OnStringDataAccept += new Maunite.Mobile.Socket.StringDataAccept(socket_OnStringDataAccept);
socket.OnClosed += new Maunite.Mobile.Socket.AsySocketClosedEvent(socket_OnClosed);
if (!String.IsNullOrEmpty(toSStr))
{
socket.Send(toSStr);
}
_connectTimes = 0;
}
catch (SocketException)
{
System.Threading.Thread.Sleep(200);
Connect(toSStr);
}
}
//因为通过ActiveSync 设备仿真器电脑上的模拟器去运行是本质是还是通过公司的网络去连接的服务端,
//这些代码执行没有错误,连接没问题,服务端显示的客户端IP和Port都是本公司的IP和端口信息
//但把程序打包成CAB装在手机上,拔掉手机与电脑的数据线,单独运行,服务端检测不到客户端 连接的信息,
//但搞不懂的是手机端这段连接的代码也不报错,也不显示程序界面这是什么个原因?


还请各位大牛指点,感激不尽!
...全文
161 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tomi 2011-09-08
  • 打赏
  • 举报
回复
@#13楼,为什么cmwap一般连接不上呢?
  • 打赏
  • 举报
回复
哎,怎么没人回答我啊
  • 打赏
  • 举报
回复
今天继续来顶,还请指点一下思路,总感觉方向想错了
shen_wei 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qjmay860909 的回复:]
拿着钢锥顶着楼主屁股顶!!
[/Quote]

大头菜 鄙视之。。。。。。
  • 打赏
  • 举报
回复
手机上这样设置连接CMNET
1.开始
2。设置
3。连接>连接
4。高级
5.选择网络
6。两个选项都选Internet设置
7。编辑>编辑
连接名字随便 调制解调器 选 蜂窝电话
下一步 接点名称 cmnet 下一步 完成 OK

然后再运行就没问题了.
LSS说的是正确的.
CMWAP是支持HTTP协议,需要用代理,SOCKET连接是连不上的。而移动的CMNET业务和CMWAP不一样,关于这两个连接方式可以百度,很详细。
问题搞定!!结贴。
  • 打赏
  • 举报
回复
我是通过CMWAP连接的,LS,谢谢LS,我试试
xiayadong 2010-12-21
  • 打赏
  • 举报
回复
如果是GPRS连接,请确认是cmnet还是cmwap,cmwap一般连接不上的,需要使用代理才行,cmnet一般都没有问题。一般都使用cmnet.

你可以试一下看通过手机的wifi连接有没有问题,如果没问题证明程序没有问题,那就检查gprs的网络连接是否是cmnet的
  • 打赏
  • 举报
回复
杯了个具的
qjmay860909 2010-12-20
  • 打赏
  • 举报
回复
拿着钢锥顶着楼主屁股顶!!
  • 打赏
  • 举报
回复
给UnKnow和
TcpClient cc = new TcpClient(AddressFamily.Unspecified);

也不管
qjmay860909 2010-12-20
  • 打赏
  • 举报
回复
大头菜不懂装懂也要顶啊!!
  • 打赏
  • 举报
回复
  IrDA是红外数据组织(Infrared Data Association)的简称,   目前广泛采用的IrDA红外连接技术就是由该组织提出的.   到目前为止,全球采用IrDA技术的设备超过了5000万部。 IrDA已经制订出物理介质和   协议层规格,以及2个支持IrDA标准的设备可以相互监测对方并交换数据。 初始的IrDA1.0   标准制订了一个串行,半双工的同步系统,传输速率为2400bps到115200bps,   传输范围1 m,传输半角度为15度到30度。最近IrDA扩展了其物理层规格使数据传输   率提升到4Mbps。PXA27x就是使用了这种扩展了的物理层规格。
  • 打赏
  • 举报
回复
突然想到了是不是实例化本地TcpClient的时候应该这样,我看有很多重载
TcpClient cc = new TcpClient(AddressFamily.Irda);

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧