Socket Android手机客户端与PC服务端局域网内联测试

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();

上面代码是 PC 服务端的名为 IQServer 类代码段,ServerSocket 创建对象  Ssocket=new ServerSocket(4632);设置监

听端口,监听来自此端口的 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了

Socket Android手机客户端与PC服务端局域网内联测试_第1张图片

抹掉的是没有影响,因为这是我测试的,而且并没有分享热点,以你自己的为准,只是演示给大家看的

然后就在上面的客户端 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的端口要一致
 */

下图白色标记部分为服务器开启之后绑定端口的进程:

Socket Android手机客户端与PC服务端局域网内联测试_第2张图片


接下来你要做的就是把写好的 客户端APP 分别安装在手持设备上,然后连上名为Fuck的热点,登陆测试帐号,测试帐号来自你的mysql数据

库,我的测试账号表如下:

Socket Android手机客户端与PC服务端局域网内联测试_第3张图片


PC 模拟器好友列表:

Socket Android手机客户端与PC服务端局域网内联测试_第4张图片



Android 平板客户端,PC模拟器客户端,PC java服务器 ,开始测试:

设备比较烂。。。大伙不要笑啊。。。o(∩_∩)o ,很久以前买的本子了,平板也是

Socket Android手机客户端与PC服务端局域网内联测试_第5张图片


聊天图,下图中 账户小情绪 可以收到来自 Engineer-Jsp的消息,而Engineer-Jsp收不到小情绪的信息,是因为还有个BUG没解决呢,因

主要目的是进行局域网测试,所以这个目前来说不重要,影响不是很大

Socket Android手机客户端与PC服务端局域网内联测试_第6张图片


局域网的测试就到此说完了,有疑问可以留言,大家一起交流和讨论,看到第一时间回复,因为平时比较忙


下面说说网域网的应用,我们都知道每次的IP都不是固定的,这就需要域名跟IP进行绑定,然后通过DNS来解析域名得到IP,或者用服务器

固定静态IP也可以,那就会涉及到访问权限和安全问题,一般的数据库有类似于红白名单这样的限制,使我们无法获取账户信息,也就是账

户无法登录,那就需要对数据库就行IP白名单设置,把权限符host设置为%号即可解决,然后在服务器上,用jvm来启动我们的服务端,用

java命令进行启动,很多博客有类似的讲解,大家可以多查查资料,了解一下


上述BUG修复:

Socket Android手机客户端与PC服务端局域网内联测试_第7张图片


也不知道我讲得详不详细,反正不懂得就提出来,大家一起讨论


源码下载地址,附带数据库:http://download.csdn.net/detail/jspping/8067509


你可能感兴趣的:(Socket,编程,Android,Android,编程)