cocos2d-x3.0之请求网络(php服务器)

HelloWorldScene.h

#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"
#include "network\HttpClient.h"
#include "cocos-ext.h"

class HelloWorld : public cocos2d::Layer
{
public:
    // there's no 'id' in cpp, so we recommend returning the class instance pointer
    static cocos2d::Scene* createScene();

    // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
    virtual bool init();

    // a selector callback
    void menuCloseCallback(cocos2d::Ref* pSender);

    // implement the "static create()" method manually
    CREATE_FUNC(HelloWorld);

	void onHttpRequestComplete(cocos2d::network::HttpClient *pSender, cocos2d::network::HttpResponse *pResponse);
	void onHttpPostComplete(cocos2d::network::HttpClient *pSender, cocos2d::network::HttpResponse *pResponse);
};

#endif // __HELLOWORLD_SCENE_H__

HelloWorldScene.cpp

#include "HelloWorldScene.h"
USING_NS_CC;
using namespace network;

Scene* HelloWorld::createScene()
{
    // 'scene' is an autorelease object
    auto scene = Scene::create();

    // 'layer' is an autorelease object
    auto layer = HelloWorld::create();

    // add layer as a child to scene
    scene->addChild(layer);

    // return the scene
    return scene;
}

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !Layer::init() )
    {
        return false;
    }

    Size visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();

    /////////////////////////////
    // 2. add a menu item with "X" image, which is clicked to quit the program
    //    you may modify it.

    // add a "close" icon to exit the progress. it's an autorelease object
    auto closeItem = MenuItemImage::create(
                                           "CloseNormal.png",
                                           "CloseSelected.png",
                                           CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
	   /*auto closeItem = MenuItemImage::create(
                                           "CloseNormal.png",
                                           "CloseSelected.png",
										   [](Object *sender)
	   {
		    #if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
				MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
				return;
			#endif

				Director::getInstance()->end();

			#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
				exit(0);
			#endif
	   });*/

	closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,
                                origin.y + closeItem->getContentSize().height/2));

    // create menu, it's an autorelease object
    auto menu = Menu::create(closeItem, NULL);
    menu->setPosition(Vec2::ZERO);
    this->addChild(menu, 1);

    /////////////////////////////
    // 3. add your codes below...

    // add a label shows "Hello World"
    // create and initialize a label

    auto label = Label::createWithTTF("Hello World", "fonts/Marker Felt.ttf", 24);

    // position the label on the center of the screen
    label->setPosition(Vec2(origin.x + visibleSize.width/2,
                            origin.y + visibleSize.height - label->getContentSize().height));

    // add the label as a child to this layer
    this->addChild(label, 1);

    // add "HelloWorld" splash screen"
    auto sprite = Sprite::create("HelloWorld.png");

    // position the sprite on the center of the screen
    sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));

    // add the sprite as a child to this layer
    this->addChild(sprite, 0);

    return true;
}

void HelloWorld::menuCloseCallback(Ref* pSender)
{
//#if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT)
//	MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert");
//    return;
//#endif
//
//    Director::getInstance()->end();
//
//#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
//    exit(0);
//#endif

	HttpRequest *request = new HttpRequest;
	request->setUrl("http://127.0.0.1/test2.php");
	request->setRequestType(HttpRequest::Type::GET);
	request->setResponseCallback(this, httpresponse_selector(HelloWorld::onHttpRequestComplete));
	request->setTag("GET1");
	HttpClient::getInstance()->send(request);
	request->release();

	//HttpRequest* request = new HttpRequest();
 //   request->setUrl("http://127.0.0.1/test.php");
 //   request->setRequestType(HttpRequest::Type::POST);
 //   request->setResponseCallback(this, httpresponse_selector(HelloWorld::onHttpPostComplete));  

   //const  char* postData = "username=zwcwu&password=123456";
   // request->setRequestData(postData,strlen(postData) );
   //
   //
   // request->setTag("POST1");
   // HttpClient::getInstance()->send(request);
   // request->release();
}

void HelloWorld::onHttpRequestComplete(cocos2d::network::HttpClient *pSender, cocos2d::network::HttpResponse *pResponse)
{
	if(!pResponse)
	{
		log("response is null", pResponse);
		return;
	}
	if(!pResponse->isSucceed())
	{
		log("response failed, %s", pResponse->getErrorBuffer());
		return;
	}

	long statusCode = pResponse->getResponseCode();
	log("responseCode:%ld", statusCode);

	std::vector<char> *buffer = pResponse->getResponseData();
	std::string buf(buffer->begin(), buffer->end());
	log("get requestData:%d,%s", buf.length(), buf.c_str());
}

void HelloWorld::onHttpPostComplete(cocos2d::network::HttpClient *pSender, cocos2d::network::HttpResponse *pResponse)
{
	if(!pResponse)
	{
		log("response is null", pResponse);
		return;
	}
	if(!pResponse->isSucceed())
	{
		log("response failed, %s", pResponse->getErrorBuffer());
		return;
	}

	long statusCode = pResponse->getResponseCode();
	log("responseCode:%ld", statusCode);

	std::vector<char> *buffer = pResponse->getResponseData();
	std::string buf(buffer->begin(), buffer->end());
	log("get requestData:%s", buf.c_str());
}

test.php

 <html>
      <body>
          <?php  

         if(isset($_POST["username"]) && isset($_POST["password"]))
         {
			 echo $_POST["username"];
             if($_POST["username"]=="zwcwu" && $_POST["password"]=="123456")
             {
                 echo "Login Success"; //return to client
             }
             else
             {
				echo "Login Failed"; //return to client
             }
         }
         else
         {
             echo "No Username or Password"; //return to client
         }
         ?>
      </body>
    </html>

test2.php

<?php
	echo "WC"
?>
时间: 2024-11-08 09:56:15

cocos2d-x3.0之请求网络(php服务器)的相关文章

双线网络发布服务器以及客户端上网

  实验要求 1.公司想将自己的服务器双线发布出去 2.员工可以访问电信和网通的WEB服务器   配置思路: 1.事先指明公司和电信网通路由器的NAT的内部和外部端口   配置NAT路由器的默认路由 2.实现公网网络互通 3.公司配置:  配置访问控制列表access-list 100 permit ip any 电信非直连网段  (允许电信网段)                 access-list100 deny ip any 电信非直连网段     (拒绝电信网段)           

.Net Core 3.0后台使用httpclient请求网络网页和图片_使用Core3.0做一个简单的代理服务器

原文:.Net Core 3.0后台使用httpclient请求网络网页和图片_使用Core3.0做一个简单的代理服务器 目标:使用.net core最新的3.0版本,借助httpclient和本机的host域名代理,实现网络请求转发和内容获取,最终显示到目标客户端! 背景:本人在core领域是个新手,对core的使用不多,因此在实现的过程中遇到了很多坑,在这边博客中,逐一介绍下.下面进入正文 正文: 1-启用httpClient注入: 参考文档:https://docs.microsoft.c

【黑马Android】(06)使用HttpClient方式请求网络/网易新闻案例

使用HttpClient方式请求网络 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"

Android请求网络共通类——Hi_博客 Android App 开发笔记

今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. 思路: 1.把请求网络的方法放到一个类里面 2.创建一个接口将数据发给Activity 3.Activity 实现接口获得服务器返回的数据 4.解析数据 来我们一先来看第一步 请求网络 在这里请求网络我们用Volley .Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健

AFNetwork 2.0在请求时报错code=-1016 和 3840

在进行网络请求时出现-1016 是因为只支持 text/json,application/json,text/javascript 你可以添加text/html 一劳永逸的方法是 在 AFURLResponseSerialization.h 里面搜索 self.acceptableContentTypes 然后 在里面 添加 @"text/html",@"text/plain" 这样就可以解决-1016的错误了 但是随之而来的是3840错误 Error Domain

Android网络编程(七)源码解析OkHttp前篇[请求网络]

相关文章 Android网络编程(一)HTTP协议原理 Android网络编程(二)HttpClient与HttpURLConnection Android网络编程(三)Volley用法全解析 Android网络编程(四)从源码解析volley Android网络编程(五)OkHttp2.x用法全解析 Android网络编程(六)OkHttp3用法全解析 前言 学会了OkHttp3的用法后,我们当然有必要来了解下OkHttp3的源码,当然现在网上的文章很多,我仍旧希望我这一系列文章篇是最简洁易懂

Android开发请求网络方式详解

转载请注明出处:http://blog.csdn.net/allen315410/article/details/42643401 大家知道Google支持和发布的Android移动操作系统,主要是为了使其迅速占领移动互联网的市场份额,所谓移动互联网当然也是互联网了,凡是涉及互联网的任何软件任何程序都少不了联网模块的开发,诚然Android联网开发也是我们开发中至关重要的一部分,那么Android是怎么样进行联网操作的呢?这篇博客就简单的介绍一下Android常用的联网方式,包括JDK支持的Ht

公司网络web服务器负载均衡解决方案

公司网络web服务器负载均衡解决方案 随着公司产品业务的推广发展壮大,对服务器的硬件性能.相应速度.服务稳定性.数据可靠性的要求越来越高.今后服务器的负载将难以承受所有的访问.从公司的实际情况,运营成本网络安全性考虑,排除使用价格昂贵的大型服务器.以及部署价格高昂的专用负载均衡设备. DNS轮询负载均衡解决方案虽然成本低廉但是安全性能不是很好,加上公司产品的特殊性需要用户验证的体系,在会话保持方面是一大缺陷,会话保持,如果是需要身份验证的网站,在不修改软件构架的情况下,这点是比较致命的,因为DN

Android 手机卫士--构建服务端json、请求网络数据

本文地址:http://www.cnblogs.com/wuyudong/p/5900384.html,转载请注明源地址. 数据的传递 客户端:发送http请求 http://www.oxx.com/index.jsp?key=value 服务器:在接受到请求以后,给客户端发送数据,(json,xml),json数据从数据库中读取出来,读取数据拼接json,语法规则,结构 获取服务器版本号(客户端发请求,服务端给响应,(json,xml)) http://www.oxxx.com/update.