ホームページ >バックエンド開発 >PHPチュートリアル >cocos2d-x ネットワークプログラミング PHP サーバーへの接続 メモ 4

cocos2d-x ネットワークプログラミング PHP サーバーへの接続 メモ 4

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-23 13:33:33976ブラウズ

VS エンジニアリング パート ----ネットワーク プログラミング

このセクションでは、ダウンロードして学習できるように、記事の最後に最終的な実装コードとリソースを掲載します。

このセクションでは、cocos2d-x にバインドされたcurl ライブラリを使用します。これについては私自身しか知りませんが、非常に人気があると言われています。誰もが笑える基本的な使い方。さて、このライブラリを使いたい場合は、やはりプロジェクト内で設定する必要があります。例えばヘッダーファイルを先頭に #include "curl/curl.h" とインクルードする必要があります (公式の書き方)

この方法で記述するには、プロジェクトのプロパティ -> リンカー - 「追加ライブラリ」が必要です。curl パスをディレクトリに追加します。私と同じように混乱している場合は、次のようにすべて記述してください: #include "curl/include/win32/curl/curl.h"間違いなく大丈夫です

さらに、プロジェクトの [プロパティ] -> [リンカー] -> [入力] -> [追加の依存関係] に「libcurl_imp.lib」、「ws2_32.lib」、「wldap32.lib」を追加する必要があります。最初のものが最も重要なので追加する必要があります。最後の 2 つのオンライン ライブラリ チュートリアルでは追加する必要があると言っていますが、本当に必要かどうかはわかりません。

最後のセクションで、onBtnLoginClicked はログイン ボタンの応答コードです。行 txtUser->setString("click login btn") をコメント アウトし、以下のコードを記述します。詳細については、curl の基本的な使用法も確認できます。curl_easy_setopt を CURLOPT_URL: リクエスト URL、CURLOPT_WRITEFUNCTION: データ受信メソッド、および CURLOPT_WRITEDATA: を設定して、返されたデータを受け入れる文字列を格納する必要があります。このうち CURLOPT_WRITEFUNCTION は非常に重要であり、データが正常に受信されるかどうかを決定します。次に、すべての設定が完了したら、curl_easy_perform を実行してネットワーク要求を実行し、サーバーから応答データを取得します。これは、必要なログインが成功したかどうかを示します。

このcurl_easy_perform関数は大きな落とし穴であることに注意してください。curl_easy_performの実行時にどのようなエラーが発生しても、実行時に即座にクラッシュするため、ユーザーは混乱します。そしてデバッグできません。実際、ほとんどのエラーは上記のcurl_easy_setopt設定エラー、特にCURLOPT_WRITEFUNCTIONによって引き起こされます。データ受信メソッドに間違ったパラメータが含まれている可能性があり、ここでクラッシュします。

        //0 获取用户名和密码		string strUser = txtUser->getString(); 		string strPass = txtPass->getString();		//1 curl初始化		CURL* curl = curl_easy_init();		if (curl)  //如果初始化成功		{			char url[1000] = {0};              //我们根据用户输入的用户名和密码拼出请求url						sprintf(url, "http://127.0.0.1/testPhp/checkLogin02.php?uname=%s&upass=%s",strUser.c_str(), strPass.c_str());			int res;			//2 网络连接初始化			res = curl_easy_setopt(curl, CURLOPT_URL, url);  //设置要连接的网址, res返回0表示成功			//3 设定数据接收方法			curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, processData);			//4 设定数据接收变量			std::string recvbuf;			curl_easy_setopt(curl, CURLOPT_WRITEDATA, &recvbuf);			//5 发起联网请求			res = curl_easy_perform(curl);			//6 处理结果,根据网络连接返回的结果实现跳转和提示			if (CURLE_OK == res)  //CURLE_OK == 0			{				if (recvbuf.compare("1")==0)  //如果返回结果为1,即用户名和密码匹配上				{					//保存用户的name					//HelloWorld::setUname(strUser);					//登录成功,跳转到游戏场景,这里GameScene就是诸位的正式游戏场景,我没实现,请见谅					//Director::getInstance()->replaceScene(GameScene::scene());					lblResult->setString("Login Success!");				}				else  //否则登录失败				{					lblResult->setString("Login Failed!");				}			}		}
関数のパラメータ形式は厳密に記述する必要があります。これによると、この関数を使用しないように注意してください。クラスとして記述されたメンバー関数は、クラスの内部関数としてのみ記述できます。そうしないと、この関数のパラメーター char* ptr が実行時にエラーが発生します。サーバーから返されたデータの最初のアドレス、size はデータ パケット内のおおよそのバイト数、nmemb はおおよそのデータ量を意味します。stream は、CURLOPT_WRITEDATA を設定するときに設定した受信データ文字列です。この関数の意味は非常に明確で、サーバーから返されたバイト数 (つまり、recvbuf) に従って char* ptr メモリのデータをストリームにコピーし、受信したデータを取得できるようにするだけです。サーバーによって


これが完了し、実行する準備が整いました。実行する前に忘れずにサーバーを開いてください。つまり、下の図のように phpStudy を実行し、Apache と mysql を起動します




念のため。ブラウザに URL を手動で入力することをお勧めします: http://127.0.0.1/testPhp/checkLogin02.php?uname=wang&upass=123

サーバーが正常かどうかを確認し、サーバーを役に立たないようにしてください。デバッグ後、結果はログインに失敗し、私はおかしくなりました -_-

さて、試してみましょう。これで UI インターフェイスにログインが成功したことが表示されるはずです。スクリーンショットは撮りません。

ソースコード + リソースファイル



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。