Socket Android手机客户端与PC服务端局域网内联测试,笔者采用的是 PC服务器,Android平板客户端 ,PC模拟器客户端,
前段时间为了加深对Socket通信的印象和知识的深度掌握,我模仿了QQ的一些元素,也借鉴了其他牛人的一些源码思想,写了
一个 叫 IQ 的 Android 聊天软件,该软件大致由 Android客户端、JAVA pc服务端、mysql数据库组成,客户端和服务端都
比较多的用到了读写的IO流,SCOKET,线程等,这篇博客主要给大家介绍测试环境,不讲源码实现方式,也就是怎么使用写好
的程序来应用和测试,我看过很多博客,在这方面说的很笼统,这样很不利于初学者的学习,所以我今天会很详细的讲一遍,
有兴趣学习Socket的可以跟着一起来,不说废话了,看博客吧
首先我们要只知道,在一个局域网内的IP是可以互相访问的,也就是同一个网段内,这样说可能很难理解,我上一些核心代码
结合代码演示给大家看:
public class IQserver {
public IQserver(){
ServerSocket Ssocket = null;
try {
Ssocket=new ServerSocket(4632);
System.out.println("Server is Loging...... "+new Date());
while(true){
//accept()是一个阻塞函数,所谓阻塞性方法
//就是说该方法被调用后将等待客户的请求,直到有一个客户启动并请求连接到相同的端口,
//然后accept()返回一个对应于客户的Socket
Socket socket = Ssocket.accept();
听端口,监听来自此端口的 SOCKET
public class IQClient {
private Context context;
public Socket socket;
public IQClient(Context context){
this.context=context;
}
// 登录
public boolean sendLoginInfo(Object obj){
boolean b=false;
try {
socket=new Socket();
try{
//host:为服务器的IP地址 port:为服务器的端口号 3000ms为连接延迟设置
socket.connect(new InetSocketAddress("10.0.0.2",4632),3000);
}catch(SocketTimeoutException e){
//连接服务器超时
return false;
上面代码段是 客户端 IQClient 的代码段,我们可以看到我目前的测试IP是 10.0.0.2,端口4632,延迟3秒,这个测试是
是单一的 PC Android模拟器访问 本地PC 的IP ,它等于 127.0.0.1,下面开始说重点,我们测试就应该把服务器和客服
端控制在同一网段下,比如:
路由器映射:我们都知道,当我们的设备连接路由器分享的热点,都会被自动分配一个IP,打个比方路由器的是
192.168.23.1,我用手机连上了路由器的热点,分配到了一个IP:192.168.23.0~255 第四个字段为不为1的0~255之间的
数字,因为IP地址不能冲突,还有就是端口4632不要与服务器的任何端口冲突,端口尽量设置不为常见的,具体端口查看
cmd命令:x:> netstat -ano
本地服务器自行设置:如果没有服务器呢,其实我们可以自己弄个局域网,玩过CS的都知道,嘿嘿,通常性能比较好的笔记
本会分出一个热点,PC的话插上wifi 也可以分享热点,然后其他玩家只要连接上这个热点就可以同时一起玩了,下面说说
笔记本分享热点的命令行,有工具的可以直接分享,不用敲命令,省事儿
笔记本热点分享CMD 命令:
x:> netsh wlan set hostednetwork mode=allow ssid=热点帐号 key=密钥
敲完回车,不用加;号
接着在敲:
x:> netsh wlan start hostednetwork
不加;号,直接回车,如果出现一些异常,或失败提示
请检查服务管理,按住田字格键(菜单键)+R键 在运行里输入services.msc
找到WLAN这一项,开启,其他错误,请找到WLAN防火墙设置,设置完,重启PC
接下来就是利用分享出来的热点,进行局域网测试,以Win7 PC 为案例
比如我现在用我的 win7笔记本分享了一个名为 Fuck 的热点,它的IP是:192.168.23.1
具体端口查看方法如下(没网的情况下):
按住田字格键(菜单键)+R键 在运行里输入cmd ,执行 ipconfig 不加;号,回车,如下图 红框 就是PC服务器热点IP了
抹掉的是没有影响,因为这是我测试的,而且并没有分享热点,以你自己的为准,只是演示给大家看的
然后就在上面的客户端 IQClient 的代码段,把IP替换成 192.168.23.1 就OK了,端口不用修改,然后执行开启服务器代码类,
服务器开启代码及结果图:
package engineer.jsp.server.Start;
/**
* @author Engineer-Jsp
* @date 2014.08.18
* IQ 启动服务类*/
import engineer.jsp.server.Control.IQserver;
public class StartServerSocket {
public static void main(String[] args) {
new IQserver();
}
}
/**
*执行IQ测试,请先执行当前类,如果有需要更新和修改代码,首先要结束进程,刷新项目,多次运行当前启动类会抛下面异常
*java.net.BindException: Address already in use: JVM_Bind
*因为它还在PC线程中执行,结束进程的CMD命令:① netstat -ano ② 找到线程所在pid ,CMD命令:taskkill /pid xxxx /f 即可
*然后单机选中项目右键刷新,在运行当前类,还需要注意server与client的端口要一致
*/
接下来你要做的就是把写好的 客户端APP 分别安装在手持设备上,然后连上名为Fuck的热点,登陆测试帐号,测试帐号来自你的mysql数据
库,我的测试账号表如下:
PC 模拟器好友列表:
Android 平板客户端,PC模拟器客户端,PC java服务器 ,开始测试:
设备比较烂。。。大伙不要笑啊。。。o(∩_∩)o ,很久以前买的本子了,平板也是
聊天图,下图中 账户小情绪 可以收到来自 Engineer-Jsp的消息,而Engineer-Jsp收不到小情绪的信息,是因为还有个BUG没解决呢,因
为主要目的是进行局域网测试,所以这个目前来说不重要,影响不是很大
局域网的测试就到此说完了,有疑问可以留言,大家一起交流和讨论,看到第一时间回复,因为平时比较忙
下面说说网域网的应用,我们都知道每次的IP都不是固定的,这就需要域名跟IP进行绑定,然后通过DNS来解析域名得到IP,或者用服务器
固定静态IP也可以,那就会涉及到访问权限和安全问题,一般的数据库有类似于红白名单这样的限制,使我们无法获取账户信息,也就是账
户无法登录,那就需要对数据库就行IP白名单设置,把权限符host设置为%号即可解决,然后在服务器上,用jvm来启动我们的服务端,用
java命令进行启动,很多博客有类似的讲解,大家可以多查查资料,了解一下
上述BUG修复:
也不知道我讲得详不详细,反正不懂得就提出来,大家一起讨论
源码下载地址,附带数据库:http://download.csdn.net/detail/jspping/8067509