做cocos2dx已经有好一段时间了,在这段时间里,也不断接触android。一直没有时间写下自己的工作经历,今天抽点时间记下一段。
关于android访问服务器获取数据的方法:
传输协议使用http通信方式,本次使用的是POST。http协议的pathname存放在变量cmd中,协议的内容格式为json。
1 String urlStr = "http://219.234.95.44:6789" + cmd;//"10.1.30.220"; 2 // urlStr = urlStr + "/getName"; 3 // urlStr = "http://www.baidu.com/"; 4 URL url = null; 5 String result = null; 6 try { 7 url = new URL(urlStr); 8 HttpURLConnection urlConn = (HttpURLConnection)url.openConnection(); 9 urlConn.setDoInput(true); 10 urlConn.setDoOutput(true); 11 urlConn.setRequestMethod("POST"); 12 urlConn.setUseCaches(false); 13 // urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 14 urlConn.setRequestProperty("Content-Type", "application/x-java-serialized-object"); 15 urlConn.setRequestProperty("Charset", "utf-8"); 16 urlConn.setConnectTimeout(20000); 17 urlConn.connect(); 18 19 DataOutputStream dop = new DataOutputStream(urlConn.getOutputStream()); 20 if(param != null) 21 dop.writeBytes(param); 22 dop.flush(); 23 dop.close(); 24 25 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConn.getInputStream())); 26 27 String line = null; 28 while((line = bufferedReader.readLine()) != null) 29 { 30 System.out.println(line); 31 result = (result == null) ? line : result + line; 32 } 33 bufferedReader.close(); 34 urlConn.disconnect(); 35 } catch (MalformedURLException e) { 36 // TODO Auto-generated catch block 37 e.printStackTrace(); 38 } catch (IOException e) { 39 // TODO Auto-generated catch block 40 e.printStackTrace(); 41 } 42 43 Message msg = new Message(); 44 Bundle data = new Bundle(); 45 data.putString("cmd", cmd); 46 data.putString("result", result); 47 msg.setData(data); 48 handler.sendMessage(msg);
这段函数不要写在主界面线程,容易报异常。第三行为测试代码。
检测服务器是否运行正常,可以使用命令行Telnet功能,打开命令行输入Telnet,如果提示这个不是内部命令,请打开控制面板,选择程序,选择打开或关闭Windows功能,在弹出的对话框中查看“Telnet客户端”这一项,并且勾选上,点击确定关闭。下面就可以再命令行中使用Telnet命令了。
输入完成后输入“open 219.234.95.44 6789”,后面的端口号不能省略,并且前面不能加冒号。然后回车,如果没有提示错误,说明服务器正常。这段代码比较简单,这里就不加注释了。
其中第19行到第23行是设置向服务器发送数据的参数,第25行是发送请求并返回服务器应答的数据。