cocos2d-lua3.7组件篇(三)-http通信demo

网友投稿 618 2022-05-30

客户端使用lua、服务端使用QT做为服务器

步骤:

客户端 -----------Post 用户名和密码

服务端接受Post请求,读取数据,返回response

一、客户端代码

loadingImg = require"app.scenes.LoadingLayer"

local LoginScene = class("LoginScene", function()

return display.newScene("LoginScene")

end)

function LoginScene:ctor()

print("LoginScene")

self.loading = loadingImg:new()

self.loading:addTo(self)

self:removeChild(self.loading)

local function onRequestCallback(event)

local request = event.request

--dump(event)

if event.name == "completed" then

print(request:getResponseHeadersString())

local code = request:getResponseStatusCode()

if code ~= 200 then

-- 请求结束,但没有返回 200 响应代码

print(code)

return

end

print("---------------callback--------")

-- 请求成功,显示服务端返回的内容

print("response length" .. request:getResponseDataLength())

local response = request:getResponseString()

print(response)

elseif event.name == "progress" then

print("progress" .. event.dltotal)

else

-- 请求失败,显示错误代码和错误消息

print(event.name)

print(request:getErrorCode(), request:getErrorMessage())

return

end

end

local request = network.createHTTPRequest(onRequestCallback, "127.0.0.1:19999", "POST")

--request:addPOSTValue("name", "laoliu")

request:setPOSTData("user:123456,password:123456")

request:start()

end

function LoginScene:onEnter()

end

function LoginScene:onExit()

end

return LoginScene

二、客户端lua代码核心介绍

network.createHTTPRequest(onRequestCallback, "127.0.0.1:19999", "POST")

--request:addPOSTValue("name", "laoliu")

request:setPOSTData("user:123456,password:123456")

三、服务端QT代码

在.pro文件中追加    QT+= core gui network

.h文件

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include

#include

#include

namespace Ui {

class MainWindow;

}

class MainWindow : public QMainWindow

{

Q_OBJECT

public:

explicit MainWindow(QWidget *parent = 0);

~MainWindow();

public slots:

void onNewConnection();

void acceptConnection();

void readMessage();

void disconnected();

void deleteLater();

private:

Ui::MainWindow *ui;

QTcpServer * serverListen;

QTcpSocket *serverConnect;

};

#endif // MAINWINDOW_H

.cpp

#include "mainwindow.h"

cocos2d-lua3.7组件篇(三)-http通信demo

#include "ui_mainwindow.h"

#include

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

serverListen = new QTcpServer;

serverConnect = new QTcpSocket;

serverListen->listen(QHostAddress::Any,19999);

connect(serverListen,SIGNAL(newConnection()),this,SLOT(acceptConnection()));

}

MainWindow::~MainWindow()

{

delete ui;

}

void MainWindow::onNewConnection()

{

int temp=1;

}

void MainWindow::acceptConnection()

{

serverConnect = serverListen->nextPendingConnection(); //得到每个连进来的socket

connect(serverConnect,SIGNAL(readyRead()),this,SLOT(readMessage())); //有可读的信息,触发读函数

}

void MainWindow::readMessage() //读取信息

{

// ui->textEdit_rec->te

QByteArray qba= serverConnect->readAll(); //读取

qDebug()<

QString ss=QVariant(qba).toString();

QString info(ss);

QStringList tokens(info.split( QRegExp("[ /r/n][ /r/n]*")));

qDebug()<

if ( tokens[0] == "GET" )

//getDeal(serverConnect);

{ qDebug()<<"get";}

if( tokens[0] == "POST")

//postDeal(serverConnect);

{ qDebug()<<"POST";}

serverConnect->write("HTTP/1.1 200 OK\r\n");

serverConnect->close();

}

void MainWindow::disconnected()

{

qDebug()<<"disconnected";

}

void MainWindow::deleteLater()

{

qDebug()<<"deleteLater";

}

核心基于,这两个类进行tcp/ip 操作

QTcpServer * serverListen;

QTcpSocket *serverConnect;

QTcpServer的基本操作:

1、调用listen监听端口。

2、连接信号newConnection,在槽函数里调用nextPendingConnection获取连接进来的socket。

QTcpSocket的基本能操作:

1、调用connectToHost连接服务器。

2、调用waitForConnected判断是否连接成功。

3、连接信号readyRead槽函数,异步读取数据。

4、调用waitForReadyRead,阻塞读取数据。

四、tcp、ip实现http的过程:

HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:

1. 建立TCP连接

2. Web浏览器向Web服务器发送请求命令

3. Web浏览器发送请求头信息

4. Web服务器应答

5. Web服务器发送应答头信息

6. Web服务器向浏览器发送数据

7. Web服务器关闭TCP连接

Cocos2D HTTP Lua TCP/IP

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:04Spark 运行架构
下一篇:python操作ffmpeg,做视频转码【上篇】
相关文章