客户端使用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" thenprint(request:getResponseHeadersString())local code = request:getResponseStatusCode()if code ~= 200 then-- 请求结束,但没有返回 200 响应代码print(code)returnendprint("---------------callback--------")-- 请求成功,显示服务端返回的内容print("response length" .. request:getResponseDataLength())local response = request:getResponseString()print(response)elseif event.name == "progress" thenprint("progress" .. event.dltotal)else-- 请求失败,显示错误代码和错误消息print(event.name)print(request:getErrorCode(), request:getErrorMessage())returnendendlocal request = network.createHTTPRequest(onRequestCallback, "127.0.0.1:19999", "POST")--request:addPOSTValue("name", "laoliu")request:setPOSTData("user:123456,password:123456")request:start()
endfunction LoginScene:onEnter()
endfunction LoginScene:onExit()endreturn 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 <QMainWindow>
#include <qsctpserver.h>
#include <qtcpsocket.h>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic: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"
#include "ui_mainwindow.h"#include <QLocalSocket>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(); //得到每个连进来的socketconnect(serverConnect,SIGNAL(readyRead()),this,SLOT(readMessage())); //有可读的信息,触发读函数
}void MainWindow::readMessage() //读取信息
{
//    ui->textEdit_rec->teQByteArray qba= serverConnect->readAll(); //读取qDebug()<<qba;QString ss=QVariant(qba).toString();QString info(ss);QStringList tokens(info.split( QRegExp("[ /r/n][ /r/n]*")));qDebug()<<tokens;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连接

在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议
与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更
高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更高层协议的连接,因此,首先要建立TCP
连接,一般TCP连接的端口号是80。

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

一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。例如:GET/sample/hello.jsp HTTP/1.1。

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

浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白
行来通知服务器,它已经结束了该头信息的发送。

4. Web服务器应答

客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一部分是协议的版本
号和应答状态码。

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

正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求
的文档。

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

Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以
Content-Type应答头信息所描述的格式发送用户所请求的实际数据。

7. Web服务器关闭TCP连接

一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其
头信息加入了这行代码:Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为
每个请求建立新连接所需的时间,还节约了网络带宽。

转载于:https://www.cnblogs.com/hiwoshixiaoyu/p/10034949.html

cocos2d-lua3.7组件篇(三)-http通信demo相关推荐

  1. Android组件化跨进程通信框架Andromeda解析

    关于组件化 随着项目结构越来越庞大,模块与模块间的边界逐渐变得不清晰,代码维护越来越困难,甚至编译速度都成为影响开发效率的瓶颈. 组件化拆分是比较常见的解决方案,一方面解决模块间的耦合关系.将通用模块 ...

  2. vue单文件props写法_详解Vue 单文件组件的三种写法

    详解Vue 单文件组件的三种写法 JS构造选项写法 export defaul { data, methods, ...} JS class写法 @Component export default c ...

  3. Android架构组件(三)——ViewModel

    Android架构组件(三)--ViewModel 上一篇文章讲到了Android架构组件之LiveData(Android架构组件(二)--LiveData),现在我们再来看看另一个成员ViewMo ...

  4. 爱奇艺开源的组件化跨进程通信解决方案

    /   今日科技快讯   / 近日,特斯拉首席执行官埃隆·马斯克来到中国上海,亲自向客户交付中国制造的Model 3,并透露了有关Model Y的更多信息,特斯拉股价继续保持着近三个月来的飙涨势头,目 ...

  5. docker omv 防火墙_我的软路由折腾之旅 篇三:在openmediavault上通过Docker实现OPENWRT旁路由功能...

    我的软路由折腾之旅 篇三:在openmediavault上通过Docker实现OPENWRT旁路由功能 2020-06-20 11:28:38 57点赞 415收藏 74评论 你是AMD Yes党?还 ...

  6. 九十一、Python的GUI系列 | QT组件篇

    @Author:Runsen @Date:2020/7/13 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  7. VMware View 5.0从菜鸟到高手系列 3 -安装View Composer组件篇

    在vCenter Server上安装View Composer组件 View Composer具有非常强大的功能,可以为企业快速部署成千上万的虚拟桌面并为企业节省近70%的存储空间. 1. 安装Vie ...

  8. Android日志[进阶篇]三-Logcat 命令行工具

    Android日志[进阶篇]一-使用 Logcat 写入和查看日志 Android日志[进阶篇]二-分析堆栈轨迹(调试和外部堆栈) Android日志[进阶篇]三-Logcat命令行工具 Androi ...

  9. python︱写markdown一样写网页,代码快速生成web工具:streamlit 展示组件(三)

    系列参考: python︱写markdown一样写网页,代码快速生成web工具:streamlit介绍(一) python︱写markdown一样写网页,代码快速生成web工具:streamlit 重 ...

最新文章

  1. 记录一下Pycharm习惯的快捷键
  2. 几种常见的CSS布局
  3. 0212互联网新闻 | 华为将发布5G折叠屏手机;谷歌在小范围内推出AR实景导航
  4. 动态规划算法分析和理解:最长公共子序列、公共子字符串
  5. Notepad++中用正则表达式匹配中文
  6. 微软开源PowerShell并支持Linux
  7. idea android 模块,IntelliJ IDEA 12 - 新的Android应用程序模块向导失败,“无法找到模块的资源目录”...
  8. 使用Oracle SQL Developer报错:Unable to find a Java Virtual Machine
  9. Android获取MAC地址
  10. move语句java_java自动化代码优化
  11. 【netty】Netty并发工具-Promise
  12. 上传文件到服务器端后进一步推送到sftp服务器
  13. Aliyun Linux2安装Docker
  14. 正则表达式 - php正则匹配内容?
  15. c语言编程软件平板_notepad++可编译C版下载-notepad++可编译C语言版下载2017版-西西软件下载...
  16. 集成运算放大器之微分电路搭建
  17. 前端第四天 盒子模型/浮动与定位
  18. SpringMVC下压缩文件下载
  19. java逻辑常量两种,JAVA常量
  20. 编写测试用例的基本方法之边界值

热门文章

  1. 【LeetCode - 1254】统计封闭岛屿的数目(dfs,连通块)
  2. 【UVALive - 3126】Taxi Cab Scheme (二分图,最小路径覆盖)
  3. 好看的a标签按钮样式
  4. StringBuilder 和 String拼接10万个字符串的速度测试差别太大了
  5. java使用三种循环打印99表_编程题:利用for循环打印 9*9 表
  6. mysql 关系_MySQL之关系
  7. leetcode143 重排链表
  8. C++(12)--函数基础:按值传递、传递数组、函数指针
  9. MachineLearning(8)-PCA,LDA基础+sklearn 简单实践
  10. php集成环境怎么打开,PHP集成开发环境PhpStorm快速入门指南(二):打开一个项目...