通过wlan连接SOCKET或TcpClient失败的现象

原文链接:


近期做一程序,虽然没用M8的SDK,但基于WinCE的,包含一Server端,一PC Client,一CE Client, 两个客户端的主要部分都是C#写的,且网络连接部分完全一样的代码,现在他们的连接状况如下:
1.PC Client, 无论是在自己机上,还是放到别人机子上,通过wlan访问自己机上的Server都完全正常,从自己机上的Client通过wlan访问别机上的Server也完全正常。
2.CE Client, 在模拟器***问Server完全正常, 在真机上连数据线访问本机Server也正常, 在真机上连本机数据线通过wlan访问别机上的Server也正常。
3.就是当手机不连接数据线通过wlan连接Server失败,TcpClient的Connect,Send测试包失败.
自我测试诊断:
网络环境为TPLink无线路由,完全局域网IP测试,服务器IP为192.168.1.20, 手机为192.168.1.100
用过两个手机测试(M8和Diamond2)都一样, 现以M8为例说明,手机为一新机,无SIM卡(所以请不要拿GPRS说事), 仅开wlan, 打开浏览器访问服务器上的 http://192.168.1.20/, 能出IIS7的首页,说明手机到Server的wlan网络是通的,同时在Server上Ping 192.168.1.100,也完全正常没有掉包过,说明双向网络都是通的
通过在Server端的监听处理代码段中断点,发现客户端的连接根本没到达Server断那边(Server端原来是监听指定IP的,那时连数据线都不能访问Server,遂将监听IP改成了0,0,0,0,连数据线就能够连接Server了)
将Server机上的和路由器上的防火墙什么的全关了,都一样,因此不是防火墙的原因
我这机器是Win7系统,另一台机器是XP系统,用哪一台做Server都一样,因此不是操作系统的原因
TcpClient的创建,连接的代码都跟PC Client的一样的,且在模拟器或是用数据线都能连,因此这部分的代码是没问题的。
Google相关现象:
国内的论坛里有人问过这问题,但没有得到解决,很多人都是基于GPRS的,所以性质不同
国外的论坛也有人问过这问题,同样也没有解决,甚至其中包括有一个人说他用HD2出现这问题,但用一个老的叫 Oxxxxx II 的手机没问题(xxxxx几个字母我没记住)
Symbian开发的有人有此问题,结果是在MMP文件里加入NetworkService的能力就可以解决。
IPhone的开发也有人有类似问题,解决结果不清楚

谢谢各位能耐心的看这么长,我想应该把我前后的过程都讲完了,请大家帮助分析,以前有没有处理过这问题的经验。
我的理解,当手机有可用的wlan连接,且已连接上的时候,应该是不用做什么动作,就可以直接进行TCP连接吧,看来这里面有问题,就是当想直接用wlan连SOCKET之前,可能要进行什么处理,现在问题就是要先作什么处理呢??


补充后续测试内容:
受人指点,直接用浏览器访问http://192.168.1.20:9988 (这就是Server端的wlan地址和监听端口),虽然不会有内容显示,但能试出服务器端有没有反映
我用卡巴的网络监控看所有的连接内容,其中就有我的Server.exe的监听我连接端口了
我一运行的时候开启了 0.0.0.0:88和0.0.0.0:9988的两个监听,在卡巴的列表里可以看得到
然后通过wlan用IE访问 http://192.168.1.20:9988,马上看到列表里多了一行,表示已经建立的TCP链接,上面还有我手机的IP,192.168.1.100以及手机上的端口1XXXX,说明这个TCP应该是通的
然后之前的0.0.0.0:9988的监听就变成了192.168.1.20:9988的监听,这也合理,192.168.1.20是电脑wlan的IP
我趁上面激活的链接还在,没关IE,马上运行Client,还是和以前一样没反应,卡巴列表里没任何动静,说明客户端的连接请求根本就没过来
请再帮忙分析下


哈哈哈哈,问题解决了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
以下是我在CSDN的留言:

希望给所有遇到过这问题的朋友,或者正要从事这方面的开发的朋友提供一点经验。
在WM上创建TcpClient,千万不要用IP,一定要用域名(domain), 至少是在像我这样的仅通过wlan连接的情况。在这几天中我搜到过两次跟这有关的事件,一是国内论坛,一个朋友说他在某些情况下用域名可以连上,用IP就是连不上, 另外一次就是国外论坛里,一个人问题与我这一模一样,最后一位说这样一句“do not use ip, replace by domain"。
其实就是这么简单的事情,但是包括我在内,有好多人问到这样的现象,都没有得到答案,我觉得有两个原因吧:一是仅通过wlan连接的情况少,一般人都有GPRS这样的环境,我这个由于里面有音视频传输,所以一定不能用GPRS, 二是像我这样不但仅连wlan,还完全在局域网测试的,局域网内不方便使用域名,我今天就是为了用花生壳动态域名,搞路由的商品映射,结果不起作用(保证方法不错,可能是这路由的原因),后来没办法,用另一朋友的电脑,用电信3G上网卡拨号,然后用花生壳,先用IE测试域名起作用了,然后用我Server放上去,这边把WM端的连接改成花生壳绑定的域名,结果连上了,能登陆进去系统了,功能都正常了。
至此,困挠我多天的问题解决了,其实不是代码的原因,因为创建TcpClient的时候用域名和IP都能编译通过的,且对应的函数都有相应的重载。
  结合我前些天的有关DirectShow的经历(可以查看已结帖的), 给与我开发经历和水平相似的朋友一点必得吧:
  1.以他人源码或SDK的Sample作了学习的样本,但不能完全依赖这些,在模拟器中或许没问题,但在实际的环境中,也许会给你造成很大的麻烦。
  2.遇到难以解决的问题,不要泄气,也不要在死胡同里钻,要多方位思考,从代码,硬件,操作系统平台的多个地方去找原因。
  3.要善于GOOGLE,呵呵,千万不要百度(不是我抬高外国人,百度尽搜些不相关的东西,完全从字面上搜的),多换关键词搜,用全英文搜,要敢于翻页到底,我有几次有用的东西都是从搜索结果的第三四十页里得到的
  4.要给自己创造条件去把跟问题相关的原因一个个的排除,也许要借用别人的条件,也许要自己购置些东西,在我看来这都是值得的。上次的DirectShow在多普达818上出不来,我以为是它的硬件太旧了,跑了两次中关村,差点花两三千块买了Diamond2或HD2,幸好第二次带着微软的例子去试,先和卖手机的说法,试出来就买,试不出来就不买,结果没试出来,呵呵,没买了。回来后过了两天,没别的路子,后来还是淘宝了一个Diamond2,只要1200多(呵呵,到现在还没和老婆讲呢,我现在手边有四个手机了,夸张吧?等我这项目顺利拿到钱了再讲,呵呵),刚买回来还是跟在卖手机地方试的一样,虽然出不来,但我至少能肯定一点,不是手机硬件没达到新标准的原因,我就到处搜,找人家的经验或相关现象,最后解决了,请参见我那帖。
  5.解决问题之后要把自己的必得和大家分享,这样才能让自己的经历有价值!!


呵呵,谢谢各位在我这几个帖子中的关心,虽然回复的人不多,可能是类似问题少见吧。
祝大家工作顺利!!我也许和绝大多数朋友不一样,我不在公司上班的,算是自由职业吧(从深圳到北京沿线都跑过了),人家要做什么就做什么,从网站后台到棋牌游戏,从电脑上的软件到手机上的应用,从正规的管理系统到比较偏门的程序都有,我一般能用C#就用C#,实在不行的再用C++或别的,不为别的原因,就是用什么技术,自己能最快实现,就用什么,现在的硬件水平都高了,不在乎所谓的一点点效率了,呵呵。
今天上半年也许和朋友筹划在北京办个公司了。
很高兴能和大家交流,我的EMail:flyling@163.com, QQ:64341283,欢迎和大家交朋友

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值