Android客户端,PC服务器,Socket连接所遇到的问题

来源:互联网 发布:服务商推广淘宝 编辑:程序博客网 时间:2024/05/04 05:54

这两天在编写 Socket客户端,服务器Demo时的总结:

1.客户端与服务器的形式:Android手机客户端,PC搭建Socket服务器,采用的是Apache-mina开源框架(异步连接框架).

2.网络连接方式:

2.1:怎么知道自己的电脑IP是内网还是外网:可以ping本机IP(cmd+ipconfig),如果IP是10.x.x.x;172.x.x.x;192.168.x.x。 基本判定为内网,其它形式一般为外网。

2.1*:如何访问内网的服务器:如果是通过路由上网,外部访问这个主机时,通过外网访问的只是路由的外网IP,路由器里面需要进行路由端口映射(将主机的IP和端口填入路由的端口映射表中),这个主机才能被访问到。校园网也类似,但是一般的用户是没有权限设置的。如果在校园网内网里面做服务器,希望被外网访问,需慎重。

2.1*:需要注意的是:比如我的本机IP是100.82.121.40,这是一个外网IP,但是实际上我是不能通过该IP地址访问服务器的,因为这是移动网的IP,而移动网是通过NAT(网络地址转换)形式的,所以在外网通过这个IP是不能本机的服务器的(可能需要类似于路由器的映射那样的转换才行,具体也不是太懂)。而与此同时,经过测试,联通和电信的网的IP是一个完整的外网IP(可以通过该IP地址访问服务器)---这是个人测试得到的一些结论,可能会有错误。

2.2:区域网内测试:手机和电脑在同一个区域网内(通过wifi连接),这时候客户端可以通过连接电脑的内网地址(区域网内的IP,一般是192.168.1.1类似的)连接PC服务器(端口任意),也可以通过直接连接电脑的外网地址(普通的IP4地址,注意不是内网的形式),其实本质只是通过内网连接(比如我外网是移动网,wifi模式下客户端可以通过外网IP连接诶服务器,但是断开Wifi,就会找不到服务器,所以这其实只是一种假象,就像本机客户端通过外网IP连接本机服务器一样)

2.3:外网测试:手机通过外网IP访问PC端的服务器,经测试,只能是联通网和电信网才行,移动网是NAT形式不能访问。

2.4:关于手机连上了wifi但是不能上网:与网上的很多教程里面的情况不一样,跟了N多教程都无用,我几经周折,最终才发现原来是杀软(bitDefend)里面没有开启internet连接功能(这样会放着外部的计算机蹭网),需要在防火墙的设定里面设置。

3.Demo展示:这次写的Demo是Apache-mina 的一个Socket客户端-服务器Demo,里面将收发消息和业务处理分开,留给具体的业务逻辑要我们自己去实现,而且还是异步非阻塞形式,所以效率比普通的Socket服务器高,关于它的用法网上一大堆教程。这里推荐这个(感谢这个作者):http://blog.csdn.net/xiaominghimi/article/details/7603084

3.1:最后贴出我的一个Demo(Android客户端和PC服务器(Java实现)):JAVA服务器选择端口打开,Android客户端输入服务器的外网IP和端口,连接。。。代码里有详细注解。

3.2需要注意的是:导入工程时,记得点击工程-buildpath-Configure buildPath,然后将我原来的JAR包移除,重新导入它们(因为每台机子上的路径都是不一样的),记得如果客户端的工程,Android Private Libraries里面没有这些JAR包,要在buildpath-Configure buildPath-Order and Export里面将它们勾上,这样Android才能将这些JAR包一起打包进入APK中。

总结:这两天一直被这种小问题所困扰(非常的耗费时间),当然,解决了它们后心情也大好。下一步就要开始写具体的服务器-客户端Demo了。

完整工程:http://download.csdn.net/detail/u010979495/8129539

0 0
原创粉丝点击