日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1.httpClient和ScrollView

發布時間:2024/9/27 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1.httpClient和ScrollView 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 在服務器端使用sqllite編寫數據庫

常見命令是:sqlite3 tank.db


進入之后創建表:

create table tscore (

id integer primary key autoincrement,

username varchar(32) unique not null,

totalscore integer not null,

score integer not null

);


在服務器端編寫程序:

#include<stdio.h>

#include<sqlite3.h>

#include<string.h>

#include<stdlib.h>

?

int main()

???? printf("Content-type:text/html\n\n");

???? //set Score to Database

???? char * queryString = getenv("QUERY_STRING");

???? if(queryString == NULL)

???? {

???????? printf("Err:queryString is NULL");

???????? return 0;

???? }

?

???? //totalscore=%d&score=%d&user=user%d

???? //獲取參數

???? char *totalScore = strtok(queryString,"&");

???? char *score = strtok(NULL,"&");

???? char *username = strtok(NULL,"&");

?

???? strtok(totalScore,"=");

???? totalScore = strtok(NULL,"=");

?

???? strtok(score,"=");

???? score = strtok(NULL,"=");

?

???? //寫數據庫

???? sqlite3* db;

???? int ret = sqlite3_open("/usr/lib/cgi-bin/tank.db",&db);

???? if(ret != SQLITE_OK)

???? {

???????? printf("open database error:%s",sqlite3_errstr(sqlite3_errcode(db)));

???????? return 0;

???? }

?

???? char sql[2048];

???? sprintf(sql,"insert into tscore(username,totalScore,score) values('%s',%s,%s)",usernam|??? ??e,totalScore,score);

???? ret = sqlite3_exec(db,sql,NULL,NULL,NULL);

???? printf("%s<br>",sql);

?

???? if(ret != SQLITE_OK)

???? {

printf("insert data error:%s",sqlite3_errstr(sqlite3_errcode(db)));

???????? sqlite3_close(db);

???????? return 0;

???? }

?

???? return 0;

}

編譯:

sudo gcc setScore.c -o setScore.cgi -lsqlite3

注意要加上最后面的-lsqlite3,不然

設置tank.db的權限


在瀏覽器中輸入以下鏈接地址:

http://192.168.28.155/cgi-bin/setScore.cgi?totalscore=100&score=1011&username=toto

網頁中的輸出運行結果:


tank.db中的內容如下:


2 游戲服務器端代碼,用于操作數據庫

?

#include <stdio.h>

#include <sqlite3.h>

#include <string.h>

#include <stdlib.h>

int selectCallback(void* arg,int argc,char** argv,char** argvv)

{

??? //argv[0] id

??? //argv[1] username

??? //argv[2] totalscore

??? //argv[3] score

?

??? // username&totalscore&score&....

??? printf("%s&%s&%s&", argv[1], argv[2], argv[3]);

??? return 0;

}

?

int main()

{

??? printf("Content-type:text/html\n\n");

#if 0

??? printf("This is cocos cgi-test\n");

??? // 打印環境變量

??? extern char** environ;

??? int i;

??? for(i=0; ;++i)

??? {

??????? if(environ[i])

??????????? printf("%s\n<br>", environ[i]);

??????? else

?????????? ?break;

??? }

#endif

?

??? // set Score to Database

??? char* queryString = getenv("QUERY_STRING");

??? if(queryString == NULL)

??? {

??????? printf("Err: queryString is NULL");

??????? return 0;

??? }

?

??? // totalscore=%d&score=%d&user=user%d

??? // 獲取參數

??? char* totalScore = strtok(queryString, "&");

??? char* score = strtok(NULL, "&");

??? char* username = strtok(NULL, "&");

?

??? strtok(totalScore, "=");

??? totalScore = strtok(NULL, "=");

?

??? strtok(score, "=");

??? score = strtok(NULL, "=");

?

??? strtok(username, "=");

??? username = strtok(NULL, "=");

?

??? // 寫數據庫

??? sqlite3* db;

??? int ret = sqlite3_open("/usr/lib/cgi-bin/tank.db", &db);

??? if(ret != SQLITE_OK)

??? {

??????? printf("open database error: %s", sqlite3_errstr(sqlite3_errcode(db)));

??????? return 0;

??? }

?

??? char sql[2048];

??? sprintf(sql, "insert into tscore (username, totalscore, score) values ('%s', %s, %s)",

??????????? username, totalScore, score);

??? ret = sqlite3_exec(db, sql, NULL, NULL, NULL);

#if 0

??? printf("%s<br>", sql);

??? return 0;

#endif

??? if(ret != SQLITE_OK)

??? {

??????? printf("insert data error: %s", sqlite3_errstr(sqlite3_errcode(db)));

??????? sqlite3_close(db);

??????? return 0;

??? }

?

??? sprintf(sql, "select * from tscore order by totalscore desc limit 10");

??? ret = sqlite3_exec(db, sql, selectCallback, NULL, NULL);

??? if(ret != SQLITE_OK)

??? {

??????? printf("select data error: %s", sqlite3_errstr(sqlite3_errcode(db)));

??????? sqlite3_close(db);

??????? return 0;

??? }

?

??? sqlite3_close(db);

?

??? return 0;

}

Makefile文件

cfiles := $(shell find -name "*.c")

targets := $(cfiles:.c=.cgi)

?

all: $(targets)

?

%.cgi:%.c

???????? gcc -o $@ $^ -lsqlite3

?

.PHONY: clean

clean:

???????? rm *.cgi

編譯:

sudo gcc setScore.c -o setScore.cgi -lsqlite3

瀏覽器訪問:

http://192.168.28.155/cgi-bin/setScore.cgi?totalscore=90&score=121&username=toto23


?

較完整的服務器段代碼

setScore.c

?

#include <stdio.h>

#include <sqlite3.h>

#include <string.h>

#include <stdlib.h>

int selectCallback(void* arg,int argc,char** argv,char** argvv)

{

??? //argv[0] id

??? //argv[1] username

??? //argv[2] totalscore

??? //argv[3] score

?

??? // username&totalscore&score&....

??? printf("%s&%s&%s&", argv[1], argv[2], argv[3]);

??? return 0;

}

?

int main()

{

??? printf("Content-type:text/html\n\n");

#if 0

??? printf("This is cocos cgi-test\n");

??? // 打印環境變量

??? extern char** environ;

??? int i;

??? for(i=0; ;++i)

??? {

??????? if(environ[i])

?????? ?????printf("%s\n<br>", environ[i]);

??????? else

??????????? break;

??? }

#endif

?

??? // set Score to Database

??? char* queryString = getenv("QUERY_STRING");

??? if(queryString == NULL)

??? {

??????? printf("Err: queryString is NULL");

??????? return 0;

??? }

?

??? // totalscore=%d&score=%d&user=user%d

??? // 獲取參數

??? char* totalScore = strtok(queryString, "&");

??? char* score = strtok(NULL, "&");

??? char* username = strtok(NULL, "&");

?

??? strtok(totalScore, "=");

??? totalScore = strtok(NULL, "=");

?

??? strtok(score, "=");

??? score = strtok(NULL, "=");

?

??? strtok(username, "=");

??? username = strtok(NULL, "=");

?

??? // 寫數據庫

??? sqlite3* db;

??? int ret = sqlite3_open("/usr/lib/cgi-bin/tank.db", &db);

??? if(ret != SQLITE_OK)

??? {

??????? printf("open database error: %s", sqlite3_errstr(sqlite3_errcode(db)));

??????? return 0;

??? }

?

??? char sql[2048];

??? sprintf(sql, "insert into tscore (username, totalscore, score) values ('%s', %s, %s)",

??????????? username, totalScore, score);

??? ret = sqlite3_exec(db, sql, NULL, NULL, NULL);

#if 0

??? printf("%s<br>", sql);

??? return 0;

#endif

??? if(ret != SQLITE_OK)

??? {

??????? printf("insert data error: %s", sqlite3_errstr(sqlite3_errcode(db)));

??????? sqlite3_close(db);

??????? return 0;

??? }

?

??? sprintf(sql, "select * from tscore order by totalscore desc limit 10");

??? ret = sqlite3_exec(db, sql, selectCallback, NULL, NULL);

??? if(ret != SQLITE_OK)

??? {

??????? printf("select data error: %s", sqlite3_errstr(sqlite3_errcode(db)));

??????? sqlite3_close(db);

??????? return 0;

??? }

??? sqlite3_close(db);

??? return 0;

}

?

3 HttpClient的客戶端:

T24HttpClient.h(Get方式)

#ifndef __T24HttpClient_H__

#define __T24HttpClient_H__

?

#include "cocos2d.h"

#include "cocos-ext.h"

#include "TBack.h"

USING_NS_CC;

USING_NS_CC_EXT;

?

class T24HttpClient :public TBack

{

public:

??? CREATE_FUNC(T24HttpClient);

??? bool init();

??? static CCScene * scene();

?

??? void HttpResponse(CCHttpClient* client, CCHttpResponse* response);

};

?

#endif

T24HttpClient.cpp

#include "T24HttpClient.h"

?

CCScene* T24HttpClient::scene()

{

??? CCScene* scene = CCScene::create();

??? T24HttpClient* layer = T24HttpClient::create();

??? scene->addChild(layer);

??? return scene;

}

?

bool T24HttpClient::init()

{

??? TBack::init();

???

??? //向服務器發送請求(http報文)單例

??? CCHttpClient* client = CCHttpClient::getInstance();

???

??? //創建一個request對象

??? CCHttpRequest* request = new CCHttpRequest();

??? //設置訪問URL

??? request->setUrl("http://192.168.192.130/cgi-bin/setScore.cgi?username=xxx&score=xxxx&totalscore=xxx");

??? request->setResponseCallback(this, httpresponse_selector(T24HttpClient::HttpResponse));

?

??? //要對client進行release

??? client->release();

?

??? return true;

}

?

//通過回調的方式實現

void T24HttpClient::HttpResponse(CCHttpClient* client, CCHttpResponse* response)

{

??? if (!response->isSucceed())

??? {

??????? CCLog("response error: %s", response->getErrorBuffer());

??????? return;

??? }

?

??? //獲得相應的數據

??? std::vector<char>* data = response->getResponseData();

?

??? std::string strData;

??? std::vector<char>::iterator it;

??? for (it = data->begin(); it != data->end(); ++it)

??? {

??????? strData.push_back(*it);

??? }

?

??? CCLog("response data is: %s", strData.c_str());

}

運行結果:

?

HttpClient(POST方式);

#ifndef __HttpClientPost_H__

#define __HttpClientPost_H__

?

#include "cocos2d.h"

#include "cocos-ext.h"

#include "TBack.h"

USING_NS_CC;

USING_NS_CC_EXT;

?

class HttpClientPost:public TBack

{

public:

??? CREATE_FUNC(HttpClientPost);

??? bool init();

??? static CCScene* scene();

?

??? void HttpResponse(CCHttpClient* client, CCHttpResponse* response);

};

?

#endif

HttpClientPost.cpp

#include "HttpClientPost.h"

?

CCScene* HttpClientPost::scene()

{

??? CCScene* scene = CCScene::create();

??? HttpClientPost* layer = HttpClientPost::create();

??? scene->addChild(layer);

??? return scene;

}

?

bool HttpClientPost::init()

{

??? TBack::init();

??? //向服務器發送請求(http報文)

??? CCHttpClient* client = CCHttpClient::getInstance();

?

??? CCHttpRequest* req = new CCHttpRequest;

??? req->setUrl("http://192.168.192.131/cgi-bin/posttest.cgi");

??? req->setRequestType(CCHttpRequest::kHttpPost);

??? req->setResponseCallback(this, httpresponse_selector(HttpClientPost::HttpResponse));

?

??? char buf[8192];

?

??? FILE* f = fopen("btn_go_0.png","rb");

??? int len = fread(buf,1,8192,f);

??? fclose(f);

??? CCLOG("len=%d\n",len);

?

??? req->setRequestData((const char*)buf,len);

?

??? client->send(req);

??? req->release();

?

??? return true;

}

?

void HttpClientPost::HttpResponse(CCHttpClient* client, CCHttpResponse* response)

{

??? //如果相應失敗

??? if (!response->isSucceed())

??? {

??????? //獲取失敗信息

??????? CCLog("response error: %s", response->getErrorBuffer());

??????? return;

??? }

???

??? //獲得相應的數據

??? std::vector<char>* data = response->getResponseData();

?

??? std::string strData;

??? std::vector<char>::iterator it;

??? for (it = data->begin(); it != data->end(); ++it)

??? {

??????? strData.push_back(*it);

??? }

?

??? CCLog("response data is:%s", strData.c_str());

}

運行結果:

?

?

?

2 CCScrollView案例

T25ScrollView.h

#ifndef __T25ScrollView_H__

#define __T25ScrollView_H__

?

#include "cocos2d.h"

#include "cocos-ext.h"

#include "TBack.h"

USING_NS_CC;

USING_NS_CC_EXT;

?

class T25ScrollView :public TBack

{

public:

??? CREATE_FUNC(T25ScrollView);

??? bool init();

??? static CCScene * scene();

?

??? bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);

??? void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);

??? void adjustViewPos(float dt);

?

??? CCNode* _node;

??? bool isSlider(CCTouch* t);

};

?

#endif

T25ScrollView.cpp

#include "T25ScrollView.h"

?

CCScene *T25ScrollView::scene()

{

??? CCScene * scene = CCScene::create();

??? T25ScrollView * layer = T25ScrollView::create();

??? scene->addChild(layer);

??? return scene;

}

?

bool T25ScrollView::init()

{

??? TBack::init();

?

??? CCSize winSize = CCDirector::sharedDirector()->getWinSize();

?

??? CCNode* node = CCNode::create();

??? _node = node;

??? char buf[] = "a";

??? //注意:ScrollView中的每個元素實際上都是一個精靈

??? for (int i = 0; i < 5; ++i)

??? {

??????? //創建精靈

??????? CCSprite* s = CCSprite::create("HelloWorld.png");

??????? //將精靈添加到node中去

??????? node->addChild(s);

??????? s->setPosition(ccp(0, winSize.height*i));

??????? s->setAnchorPoint(ccp(0, 0));

?

??????? //設置標簽

??????? CCLabelTTF* label = CCLabelTTF::create(buf, "Arial", 24);

??????? buf[0]++;

??????? s->addChild(label);

??????? label->setPosition(ccp(winSize.width / 2, winSize.height / 2));

??? }

?

??? //創建ScrollView,創建的時候需要node節點

??? CCScrollView* view = CCScrollView::create(winSize, node);

??? addChild(view);

??? //設置滾動試圖的顯示方式,下面的設置表示的是垂直滾動

??? view->setDirection(kCCScrollViewDirectionVertical);

??? //設置view的ContentSize,大小是5個精靈的高度

??? view->setContentSize(CCSizeMake(winSize.width, winSize.height * 5));

??? view->setBounceable(false);// 去掉彈性

?

??? setTouchEnabled(true);

??? setTouchMode(kCCTouchesOneByOne);

?

??? return true;

}

?

bool T25ScrollView::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)

{

??? return true;

}

?

//判斷是否滾動了

bool T25ScrollView::isSlider(CCTouch* t)

{

??? CCPoint ptCur = t->getLocation();

??? CCPoint ptStart = t->getStartLocation();

??? if (ptCur.getDistanceSq(ptStart) > 25)

??? {

??????? return true;

??? }

??? return false;

}

?

void T25ScrollView::adjustViewPos(float dt)

{

??? //計算

??? CCSize winSize = CCDirector::sharedDirector()->getWinSize();

??? int fitPos[] = {

??????? 0,?????????????????????

??????? -winSize.height,?????? //向下移動一屏

??????? -winSize.height * 2,?? //向下移動兩屏

??????? -winSize.height * 3,?? //向下移動三屏

??????? -winSize.height * 4??? //向下移動四屏

??? };

?

??? int y = _node->getPositionY();

??? int i;

??? for (i = 0; i < 5; ++i)

??? {

??????? int dist = abs(fitPos[i] - y);

??????? if (dist < winSize.height / 2)

??????? {

??????????? break;

??????? }

??? }

?

??? //創建一個點

??? CCPoint ptDest = ccp(0, fitPos[i]);

??? //讓點移動到指定的位置

??? _node->runAction(CCMoveTo::create(.2f, ptDest));

}

?

void T25ScrollView::ccTouchEnded(CCTouch* t, CCEvent* e)

{

??? //判斷點擊的坐標,是哪個坐標

??? if (isSlider(t))

??? {

??????? //調整位置

??????? scheduleOnce(schedule_selector(T25ScrollView::adjustViewPos), 0.05f);

??????? return;

??? }

?

??? //點擊的代碼

??? CCSize winSize = CCDirector::sharedDirector()->getWinSize();

?

??? CCPoint ptWorld = t->getLocation();

??? //將世界坐標轉化成為本地坐標

??? CCPoint ptNode = _node->convertToNodeSpace(ptWorld);

??? int index = ptNode.y / winSize.height;

??? CCLog("clicked index=%d", index);

}

運行結果(上下移動):


?

?

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的1.httpClient和ScrollView的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。